1. 程式人生 > >shell編程腳本語法

shell編程腳本語法

編程 shell 腳本

學習了兩個月的Linux,記住了很多命令,知道了腳本的作用,也被腳本殺死了大概一半的腦細胞,現在腳本還不能熟練運用,感覺虧了。心疼我的腦細胞,痛恨腳本,但不得不說,腳本是一個好東西啊,用起來真的方便,但是寫起來真的燒腦袋呦!下面來總結一下這周學習的腳本語法,哇,語法雖然不多也不難,但是結合起來熟練運用還有一定的難度,何況現在的腳本才幾行,以後要寫幾行,心裏沒點數嗎!廢話少說,開始

跳過最基礎的命令行堆積的腳本,總結一下讓腳本更簡潔實用的語法

首先,條件選擇if語句登場

if語句用法:常見的單分支,雙分支,多分支。

實際中能不能用到單分支語句不能心裏沒點數嗎,直接多分支,會了多分支,單雙分支自然就會了

if 判斷條件1; then

條件為真的命令代碼

elif 判斷條件2;then

條件為真的命令代碼

elif 判斷條件3;then

條件為真的命令代碼

else

以上條件都為假的命令代碼


舉個例子:

技術分享

完畢

條件判斷:case語句

case $1 in

條件1)

分支3

;;

條件2)

分支2

;;

……

*)

默認分支

;;

esac

case支持glob風格的通配符:

*: 任意長度任意字符 【比如搜索文件的話 K*)匹配所有K開頭的文件名】

?: 任意單個字符

[]:指定範圍內的任意單個字符

a|b: a或b

舉個例子:

技術分享

循環語句 for while until shift select

作用如其名,將某代碼段重復運行多次

for循環用法

for 變量名 in 列表;do

循環體

done

執行機制:依次將列表中的元素賦值給“變量名”; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束

【一般套路:變量名一般是上面定義過的變量,這裏用來引用 如:$i 或者是位置變量 如:$1,$2

列表一般都是通過調用命令結果來生成的 如 `seq 1 10` $(ls /etc) 】

for循環還有一個特殊格式:和C語言類似

for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式))

(( i=0; i<=100; i++ ))

do

循環體

done

舉兩個例子:(一個普通for循環,一個for循環特殊格式)

技術分享

技術分享

while循環語句:

用法:

while CONDITION;do

循環體

done

CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之後會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環 因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正

這裏可以創建無限循環

while true;do

循環體

done

for循環有特殊格式,while也有

while循環的特殊用法(遍歷文件的每一行):

while read line; do

循環體

done < /PATH/FROM/SOMEFILE

依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line

用法介紹完畢,來舉例:

技術分享

技術分享select循環語句

用法:

select 變量名 in 列表 與for語句類似,套路也一樣。

do

循環體命令

done

select 循環主要用於創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,並顯示 PS3 提示符,

等待用戶輸入,用戶輸入被保存在內置變量 REPLY 中

select 經常和 case 聯合使用 生成菜單列表。[不是吃飯的菜單!!]

select 是個無限循環,因此要記住用 break 命令退出循環,或用 exit 命令終止腳本。也可以按 ctrl+c 退出循環

舉例舉例:技術分享循環控制shift命令;

用於將參量列表 list 左移指定次數,缺省為左移一次。

當用到while語句,並且while 循環遍歷位置參量列表時,常用到 shift

舉例:

技術分享執行結果:(相信一看你就什麽都懂了)

技術分享

跳出單次循環continu語句:

continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層

來吧 舉個例子吧:

技術分享跳出整個循環break語句:

break [N]:提前結束第N層循環,最內層為第1層【註意是結束第N層循環,不是本次循環】

再舉例:

技術分享

到這裏shell編程腳本的基礎語句差不多介紹完了,之後還可以在腳本裏調用函數,數組。這樣,腳本的使用和編寫就可以更加的簡單明了,下次博客再介紹函數的定義和調用,數組的定義和調用吧,我要去寫腳本了,bye~~


shell編程腳本語法