《跟老男孩學Linux營運之shell編程實戰》-第三章 shell變數知識進階

來源:互聯網
上載者:User

標籤: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變數知識進階

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.