shell study-3day--shell變量及實例

一、SHELL 變量及運用

1)shell變量

變量是shell傳遞數據的一種方法。變量是用來表明每一個值的符號名,經過變量,能夠在內存中存儲數據,也能夠在腳本執行中進行修改和訪問存儲的數據。shell

2)變量設置規則

A、變量名稱一般是大寫字母,它能夠由數字、字母(大小寫)和下劃線_組成。變量名區分大小寫;變量名稱不能以數字開頭;vim

B、等號 = 用於爲變量分配值,在使用過程當中等號兩邊不能有空格;bash

C、變量存儲的數據類型是整數值和字符串值;ssh

D、在對變量賦於字符串值時,建議你們用引號將其括起來。由於若是字符串中存在空格隔符號。須要使用單引號或雙引號;ide

E、要對變量進行調用,能夠在變量名稱前加美圓符號$;spa

F、若是須要增長變量的值,那麼能夠進行變量值的疊加。不過變量須要用雙引號包含「$變量名」或用${變量名}包含;命令行

3)變量分類

按照變量的做用能夠分紅4類:orm

A、用戶自定義變量;進程

B、環境變量:這種變量中主要保存的是和系統操做環境相關的數據;圖片

C、位置參數變量:這種變量主要是用來向腳本當中傳遞參數或數據的,變量名不能自定義,變量做用是固定的;

E、預約義變量:是 Bash 中已經定義好的變量,變量名不能自定義,變量做用也是固定的。

按照變量做用範圍分爲2類:

A、局部變量是 shell 程序內部定義的,其使用範圍僅限於定義它的程序,對其它程序不可見。包括:用戶自定義變量、位置變量和預約義變量。

B、全局變量是環境變量,其值不隨 shell 腳本的執行結束而消失。

4)用戶自定義變量

變量名命名規則:由字母或下劃線打頭,不容許數字開頭,後面由字母、數字或下劃線組成,而且大小寫字母意義不一樣。在使用變量時,在變量名前加$。

Eg1:給變量test賦值

[root@test65-1 ~]# test=1 
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]#

Eg2:變量值疊加,使用${}

$name 是${name}的簡化版本,可是在某些狀況下,還必須使用花括號引發的方式來消除歧義並避免意外的結果。

[root@test65-1 ~]# test1=access
[root@test65-1 ~]# echo test1
test1
[root@test65-1 ~]# echo $test1
access
[root@test65-1 ~]# echo $test1.log
access.log
[root@test65-1 ~]#

5)命令替換

Date命令:

date 命令是顯示或設置系統時間與日期。

-s<字符串>:根據字符串來設置日期與時間。字符串先後必須加上雙引號;

<+時間日期格式>:指定顯示時,使用特定的日期時間格式

實例:

A、顯示當前時間年、月、日

[root@test65-1 ~]# date +"%Y-%m-%d"
2020-10-12

B、顯示當前時間年、月

[root@test65-1 ~]# date +"%Y-%m"
2020-10

#顯示日期及時間

date +"%Y-%m-%d %H:%M.%S"

#顯示日期及時間,使用/分割

date +"%Y/%m/%d %H/%M/%S"

#顯示日期及時間,使用-進行分割(備份通常使用該方式)

date +"%Y-%m-%d-%H-%M-%S"

Date命令加減操做:

#顯示當前時間(年、月、日)

date +"%Y%m%d"

#顯示明天的日期

date -d "+1 day" +%Y%m%d

#顯示昨天的日期

date -d "-1 day" +%Y%m%d

#顯示上一月的日期

date -d "-1 month" +%Y%m%d

#顯示下一月的日期

date -d "+1 month" +%Y%m%d

#顯示前一年的日期

date -d "-1 year" +%Y%m%d

#顯示下一年的日期

date -d "+1 year" +%Y%m%d

設定時間:

#設置成20201020,這樣會把具體時間設置成空 00:00:00

date -s 20201020

#設置具體時間,不會對日期作更改

date -s 15:10:20

#設置所有時間

date -s "2020-10-20 15:10:20"

A、命令中調用date命令

[root@test65-1 ~]# echo date  #只顯示date值
date
[root@test65-1 ~]# echo $date #date變量未賦值
 
[root@test65-1 ~]# echo `date` #調用date命令成功
Mon Oct 12 09:59:18 CST 2020
[root@test65-1 ~]# echo $(date) #調用date命令成功
Mon Oct 12 09:59:39 CST 2020
[root@test65-1 ~]# date
Mon Oct 12 10:02:10 CST 2020

6)命令的嵌套使用,使用$( $( ))

[root@test65-1 ~]# find /home/ -name *.log
[root@test65-1 ~]# testtar=$(tar -zcvf home.tar.gz $(find /root/ -name *.txt))
[root@test65-1 ~]# echo $testtar

7)shell 中單引號和雙引號區別

‘’ 在單引號中全部的字符包括特殊字符($,'',`和\)都將解釋成字符自己而成爲普通字符。

「」 在雙引號中,除了$, '', `和\之外全部的字符都解釋成字符自己,擁有「調用變量的值」、「引用命令」和「轉義符」的特殊含義。

注:\轉義符,跟在\以後的特殊符號將失去特殊含義,變爲普通字符。如\$將輸出「$」符號,而不當作是變量引用。

Eg:\轉義符做用

[root@test65-1 home]# test=1
[root@test65-1 home]# echo $test
1
[root@test65-1 home]# echo \#test
#test
[root@test65-1 home]# echo \$test
$test
[root@test65-1 home]#

A、雙引號與單引號區別

[root@test65-1 home]# test=1
[root@test65-1 home]# test1=2
[root@test65-1 home]# echo '$test+$test1'
$test+$test1
[root@test65-1 home]# echo "$test+$test1"
1+2
[root@test65-1 home]#

注:單引號之間的內容原封不動賦值給變量,雙引號之間的內容若有特殊符號會保留它的特殊含義。

刪除變量:

[root@test65-1 home]# unset test
[root@test65-1 home]# echo $test
 
[root@test65-1 home]#

8)環境變量

bash shell 中,變量分爲兩類:全局變量和局部變量

全局變量:對於shell會話和全部的子shell都是可見的

局部變量:它只在本身的進程當中使用

A、局部變量

[root@test65-1 home]# test=1 
[root@test65-1 home]# vi 1.sh
#!/bin/bash
echo $test
[root@test65-1 home]# sh 1.sh 
 
[root@test65-1 home]# echo $test
1

#執行1.sh 時,會使用另外一個bash去執行,就訪問不到$test的值

B、env 命令查看所全局變量

[root@test65-1 ~]# env
[root@test65-1 ~]# env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

C、使用 export 把這個局部變量輸出爲全局變量

[root@test65-1 ~]# export test=1
[root@test65-1 ~]# echo $test
1
[root@test65-1 ~]# sh 1.sh 
1
[root@test65-1 ~]#

D、讓變量永久生效,能夠把定義好的變量寫入配置文件

當登陸系統或新開啓一個 ssh 鏈接啓動 bash 進程時,必定會加載這 4 個配置文件:

#系統全局環境和登陸系統的一些配置

[root@test65-1 ~]# vim /etc/profile

#shell 全局自義配置文件,用於自定義 shell

[root@test65-1 ~]# vim /etc/bashrc

#用於單獨自定義某個用戶的 bash

[root@test65-1 ~]# vim /root/.bashrc

#用戶單獨自定義某個用戶的系統環境

[root@test65-1 ~]# vim /root/.bash_profile

9)shell位置變量

Shell解釋執行用戶的命令時,將命令行的第一個字符做爲命令名,而其它字符做爲參數。

$0 獲取當前執行shell腳本的文件文件名,包括腳本路徑,命令自己

$n 獲取當前腳本的第n個參數 n=1,2.....n 當 n 大於 9 時 用${10}表示

Eg:

[root@test65-1 ~]# vim test.sh
#!/bin/bash
echo "本 shell 腳本的文件名: $0"
echo "第 1 個參數: $1"
echo "第 2 個參數: $2"
echo "第 3 個參數: $3"
echo "第 4 個參數: $4"
[root@test65-1 ~]# chmod +x print.sh
[root@test65-1 ~]# ./test.sh 1 2 3 4
本 shell 腳本的文件名: ./test.sh
第 1 個參數: 1
第 2 個參數: 2
第 3 個參數: 3
第 4 個參數: 4
[root@test65-1 ~]#

10)特殊變量

有些變量是一開始執行 Script 腳本時就會設定,且不能被修改,但咱們不叫它只讀的系統變量,而叫它特殊變量。這些變量當一執行程序時就有了,如下是一些特殊變量:

$* 以一個單字符串顯示全部向腳本傳遞的參數;如"$*"用雙引號括起來的狀況、以"$1 $2 … $n"的形式輸出全部參數
$n  第n個參數值,n=1..9
$#  傳遞到腳本的參數個數
$$  當前進程的進程號 PID
$?  顯示最後命令的退出狀態;0 表示沒有錯誤,其餘任何值代表有錯誤
$!  後臺運行的最後一個進程的進程號 pid

Eg:

[root@test65-1 ~] vim  test.sh
#!/bin/bash
echo "$* 表示這個程序的全部參數"
echo "$# 表示這個程序的參數個數"
echo "$$ 表示程序的進程 ID"
touch /tmp/b.txt &
echo "$! 執行上一個後臺指令的 PID"
echo "$$ 表示程序的進程 ID"
echo "$? 表示上一個程序執行返回結果 "
 
[root@test65-1 ~]# sh test.sh  test
test 表示這個程序的全部參數
1 表示這個程序的參數個數
1684 表示程序的進程 ID
1685 執行上一個後臺指令的 PID
1684 表示程序的進程 ID
0 表示上一個程序執行返回結果
[root@test65-1 ~]#

我的公衆號:

圖片.png

相關文章
相關標籤/搜索