shell腳本語法總結
過程式編程語言:
順序執行 選擇執行 循環執行
shell默認是順序執行,如果有判斷或循環語句則執行判斷或循環。
條件判斷
if 單分支 if 判斷條件:then 條件為真的分支代碼 fi 雙分支 if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi 多分支 if CONDITION1; then if-true elifCONDITION2; then if-ture elifCONDITION3; then if-ture ... else all-false fi 逐條件進行判斷,第一次遇為“真”條件時,執行其分支,而后結束整個if語句 if取的是判斷語句的運行狀態返回值。true or false case case 變量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; ... *) #任意長度任意字符 (最終會匹配的條件)可以不寫這個條件 默認分支 ;; esac ===================================================== pat)通配模式 case支持glob風格的通配符: *: 任意長度任意字符 ?: 任意單個字符 []:指定范圍內的任意單個字符 a|b: a或b 注case 分支語句要用雙分號結尾。 case中的patter后的分支語句通過golb通配case引用的變量,匹配則執行分支語句。不匹配則往下執行。
循環
for for循環 循環條件是列表不為空,列表中的數據用完則循環結束 for 變量名in 列表;do 循環體 .. done 執行機制: 依次將列表中的元素賦值給“變量名”; 每次賦值后即執行一次循環體; 直到列表中的元素耗盡,循環結束 while while CONDITION; do 循環體 done CONDITION:循環控制條件;進入循環之前,先做一次判斷;每一次循環之后會再次做判斷;條件為“true”,則執行一次循環;直到條件測試狀態為“false”終止循環 因此:CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正 進入條件:CONDITION為true; 退出條件:CONDITION為false until ntil循環 條件為假時開始循環,條件為真時結束循環。 until CONDITION; do 循環體 done 進入條件:CONDITION 為false 退出條件:CONDITION 為true CONDTION一般應該有循環控制變量;而此變量的值會在循環體不斷地被修正
continue
用于循環體中---提前中斷循環體的本輪運行 continue [N]:提前結束第N層的本輪循環,而直接進入下一輪判斷;最內層為第1層 while CONDTIITON1; do CMD1 ... if CONDITION2; then continue fi CMDn ... done
break—跳出循環 ,并停止整個循環。默認是1
break 后可以加數字 --用于循環體中,可以指定跳出那一層循環(存在嵌套循環)。 break [N]:提前結束第N層循環,最內層為第1層 while CONDTIITON1; do CMD1 ... if CONDITION2; then break fi CMDn ... done
創建無限循環
while true; do5 循環體 done until false; do 循環體 Done
exit
只要在腳本中出現exit則腳本退出執行。 如果在腳本的子shell中出現exit則退出子shell腳本運行。
交互–用戶輸入
select 屬于循環語句 select variable in LIST do 循環體命令 done 運行后,用戶按提示(根據in后面的列表生成的菜單)輸入選擇,則將select將后面的變量名賦值為對應的in列表中的值。 elect 循環主要用于創建菜單,按數字順序排列的菜單項將顯示在標準錯誤上,并顯示PS3 提示符,等待用戶輸入 用戶輸入菜單列表中的某個數字,執行相應的命令 用戶的輸入 被保存在內置變量REPLY 中。 常配合case使用 read 使用read來把輸入值分配給一個或多個shell變量: -p指定要顯示的提示 -t TIMEOUT read從標準輸入中讀取值,給每個單詞分配一個變量 所有剩余單詞都被分配給最后一個變量 read -p “Enter a filename:“ FILE
函數
函數function是由若干條shell命令組成的語句塊 實現代碼重用 模塊化編程 機構化編程 把獨立功能的代碼當作一個整體,并為之一個名字;命名的代碼段,此即為函數; 函數命名應盡量避免與命令或系統關鍵字重名。命名法則與變量相同 語法一: function f_name{ ...函數體... } 語法二:(常用) f_name() { ...函數體... } 函數的使用 函數的定義和使用: 可在交互式環境下定義函數 可將函數放在腳本文件中作為它的一部分 可放在只包含函數的單獨文件中,使用source或點號調用函數文件。 調用:函數只有被調用才會執行; 再腳本中調用:給定函數名;函數名出現的地方,會被自動替換為函數代碼 交互式環境下,注銷函數 使用 unset 函數名 函數支持位置參數變量和特殊變量;在腳本中,腳本的位置參數變量和特殊變量與其內部函數的位置參數變量和特殊變量不是同一變量,注意區別開 注:函數放在調用函數的代碼之前,定義代碼段不執行,調用才執行。一般都放到腳本的前面先定義好函數。下面在調用。
return
定義腳本最后一條命令的返回值,多用于給函數定義 例如函數內部有條件判斷語句,不同情況下,每個語句都有執行成功的可能。這樣可以給每中情況定義不同的狀態返回值。
local
定義局部變量 多用于函數內部的變量定義。定義后該變量只在該函數體內部生效。
特殊用法
while循環的特殊用法(遍歷文件的每一行):
while read line; do ##read 與用戶交互命令 line是個變量可以自定義名稱。 循環體 ##處理的內容為line這個變量的內容(文本中的一行)。 done < /PATH/FROM/SOMEFILE #使用標準輸入重定向輸入文檔。 依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line 練習 掃描/etc/passwd文件每一行,如發現GECOS字段為空,則填充用戶名和單位電話為62985600,并提示該用戶的GECOS信息修改成功。 雙小括號方法,即((…))格式,也可以用于算術運算等于 let EXPRESSION 雙小括號方法也可以使bash Shell實現C語言風格的變量操作 #I=10 #((I++))
for循環的特殊格式: help for
for ((控制變量初始化;條件判斷表達式;控制變量的修正表達式)) do 循環體 done 控制變量初始化:僅在運行到循環代碼段時執行一次,一次循環時初始化變量 控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,而后再做條件判斷 條件判斷表達式,可以寫的非常簡單。 i<=100即可 括號內中的內容需要用分號隔開。 例如for (( i=0;i<=100;i++));do let sum+=$i done echo "$sum" for ((: for (( exp1; exp2; exp3 )); do COMMANDS; done Arithmetic for loop. Equivalent to (( EXP1 )) while (( EXP2 )); do COMMANDS (( EXP3 )) done EXP1, EXP2, and EXP3 are arithmetic expressions. If any expression is omitted, it behaves as if it evaluates to 1. Exit Status: Returns the status of the last command executed.
原創文章,作者:yyw,如若轉載,請注明出處:http://www.www58058.com/38472