標籤:shell變數 特殊位置變數 特殊擴充變數
本文講解shell變數知識進階。
以下為知識點的總結,關於練習,本文不不涉及,還需要各位小夥伴自己練習!
1.shell中的特殊位置參數變數,請見下表:
650) this.width=650;" width="600" height="276" title="shell6.png" style="width:600px;height:276px;" alt="wKiom1j2-b3zkLsbAAEIRq4FUTI660.png" src="https://s2.51cto.com/wyfs02/M01/91/96/wKiom1j2-b3zkLsbAAEIRq4FUTI660.png" border="0" vspace="0" hspace="0" />
在企業情境下,“$?”的用法:
(1)判斷命令、指令碼或函數等程式是否執行成功;
(2)若在指令碼中調用執行“exit 數字”,則會返回這個數字給“$?”變數;
(3)如果是在函數裡,則通過“return 數字”,把這個數字以函數傳回值的形式傳給“$?”。
在應用上述特殊位置變數時,也可能會用到下述知識點:
擷取指令碼的路徑:dirname path/script-name
擷取指令檔名:basename path/script-name
比如用for迴圈做簡單測試時,for i;do echo $i;done,可能很多網友看到會有些不理解,一般for迴圈
會寫for i in ...,此處省略了in變數列表,在此相當於有引號的in“[email protected]”
用shift將位置參數移位(左移)
2.Bash Shell內建變數命令
(1)echo:在螢幕上輸出資訊
命令格式:echo args xxx ==>xxx可以是字串和命令的組合
功能說明:將echo命令後面args指定的字串及變數等顯示到標準輸出。
常見參數如下:
650) this.width=650;" width="600" height="149" title="shell9.png" style="width:600px;height:149px;" alt="wKiom1j2_GWBleKxAAArlrOhZTw459.png" src="https://s3.51cto.com/wyfs02/M00/91/98/wKiom1j2_GWBleKxAAArlrOhZTw459.png" border="0" vspace="0" hspace="0" />
(2)eval
命令格式:eval cmd ==>cmd包含變數等命令
功能:當shell程式執行到eval語句時,shell讀入參數cmd,並將它們組合成一個新的命令,然後去執行,簡單點說,
就是eval會對後面的cmd進行兩遍掃描,如果第一遍掃描後,cmd是個普通的命令,則執行此命令,如果cmd中含
有變數,則第一遍掃描先確認變數的值,然後進行第二遍掃描,得出結果,例如:
[[email protected] ]# set -- arg1 arg2 ==>通過set設定兩個參數
[[email protected] ]# echo $# ==>$#表示傳參的個數
2
[[email protected] ]# echo \$$# ==>由於$#為2,所以此命令就變為echo $2 ,但此時並未輸出$2的值,而是輸出了$2,
這也就是上述提到的提一次掃描,將$#替換為$2
$2
[[email protected] ]# eval "echo \$$#" ==>eval進行第2次掃描,直接輸出echo $2的值arg2
arg2
(3)exec
命令格式:exec 命令參數
功能:exec命令能夠在不建立新的子進程的前提下,轉去執行指定的命令,當指定的命令執行完畢後,該進程也就
終止了,如果是遠端連線的會話,則執行完命令後,該會話直接退出。
如下:
[[email protected] scripts]# exec date ==>執行完此命令,直接退出當前會話
Wed Apr 19 16:18:31 CST 2017
Connection closed.
Type `help‘ to learn how to use Xshell prompt.
Xshell:\>
Connection closed by foreign host.
另外,當使用exec開啟檔案後,read命令每次都會將檔案指標移動到檔案的下一行進行讀取,直至檔案末尾,
利用這個可以實現處理檔案內容。
例如:
[[email protected] ~]# seq 5 > /tmp/seq.txt
[[email protected] scripts]# cat exec.sh
exec </tmp/seq.txt
while read line
do
echo $line
done
echo ok
[[email protected] scripts]# sh exec.sh
1
2
3
4
5
ok
(4)read
命令格式:read 變數名表
功能:從標準輸入讀取字串等資訊,傳給shell程式內部定義的變數(後續章節中講解)
(5)shift:用shift將位置參數移位(左移),將位置參數$1、$2等進行左移,即如果位置參數是$3、$2、$1,
那麼執行一次shift後,$3變為$2,$2變為$1,$1就消失了。
(6)exit:shell程式,當然exit也可以選擇執行的數字作為傳回值。
3.shell變數子串知識
650) this.width=650;" width="720" height="305" title="1.png" style="width:720px;height:305px;" alt="wKioL1j4D1jCzTX-AAFOmugkd9o187.png" src="https://s5.51cto.com/wyfs02/M01/91/B9/wKioL1j4D1jCzTX-AAFOmugkd9o187.png" border="0" vspace="0" hspace="0" />
提示:
上述ID為11-14中運算式的冒號可以省略,如果省略了其中的冒號,則將每個定義中的“為空白或未賦值”部分改為“未賦值”。
為了方便理解,這裡對${#parameter##word}舉例說明一下:
${#parameter%% a*c} :這裡的a*c表示匹配的字串,*表示匹配所有,a*c表示匹配開頭為a、中間為任意多字元,結尾為c的字串。
以上為本人在讀《跟老男孩學Linux營運之shell編程實戰》這本書時的筆記,如有任何著作權問題,請聯絡[email protected]。
本文出自 “shayatou_1990” 部落格,請務必保留此出處http://shayatou1990.blog.51cto.com/12806916/1917612
《跟老男孩學Linux營運之shell編程實戰》-第三章 shell變數知識進階