過程式編程語言:
順序執行
選擇執行
循環執行
注:條件中的變量,能夠在執行語句中使用,不用在加上"$"。sql
根據命令的退出狀態來執行命令
單分支
if 判斷條件;then
條件爲真的分支代碼
fi
雙分支
if 判斷條件; then
條件爲真的分支代碼
else
條件爲假的分支代碼
fi
多分支
if 判斷條件 1 ; then
條件爲真的分支代碼
elif 判斷條件 2 ; then
條件爲真的分支代碼
elif 判斷條件 3 ; then
條件爲真的分支代碼
else
以上條件都爲假的分支代碼
fi
逐條件進行判斷,第一次遇爲「真」條件時,執行其分支,然後結束整個if 語句
case用法:
case 變量引用 in
PAT1)
分支1
;;
PAT2)
分支2
;;
...
*)
默認分支
;;
esac
case 支持glob 風格的通配符:
*: 任意長度任意字符
?: 任意單個字符
[]:指定範圍內的任意單個字符
a|b: a 或b
for 變量名 in 列表;do
循環體
done
依次將列表中的元素賦值給「變量名」; 每次賦值後即執行一次循環體; 直到列表中的元素耗盡,循環結束。
or
for ((exp1;exp2;exp3)); do
COMMANDS
done
控制變量初始化:僅在運行到循環代碼段時執行一次
控制變量的修正表達式:每輪循環結束會先進行控制變量修正運算,然後再作條件判斷
列表生成方式:
直接給出列表
整數列表:
(a) {start..end}
(b) $(seq [start [step]] end)==` `
返回列表的命令
$(COMMAND)
使用glob,如:*.sh
變量引用;
$@, $*
while CONDITION; do
循環體
done
CONDITION:
循環控制條件,進入循環以前,先作一次判斷,每一次循環以後會再次作判斷。
條件爲"true" ,則執行一次循環,直到條件測試狀態爲"false" 終止循環。
CONDTION 通常應該有循環控制變量,而此變量的值會在循環體不斷地被修正。
進入條件:
CONDITION 爲true
退出條件:
CONDITION 爲false
特殊用法
遍歷文件的每一行
while read line(任意); do
循環體
done < /PATH/FROM/SOMEFILE
or
命令、文件或其餘(標準輸出) |while read line; do
循環體
done
依次讀取/PATH/FROM/SOMEFILE文件中的每一行,且將行賦值給變量line
until CONDITION; do
循環體
done
CONDITION:
循環控制條件,進入循環以前,先作一次判斷,每一次循環以後會再次作判斷。
條件爲"false" ,則執行一次循環,直到條件測試狀態爲"true" 終止循環。
CONDTION 通常應該有循環控制變量,而此變量的值會在循環體不斷地被修正。
進入條件:
CONDITION 爲false
退出條件:
CONDITION 爲true
continue
用於循環體中,直接繼續下個循環。
continue [N],提早結束第N層的本輪循環,而直接進入下一輪判斷,最內層爲第1層。
break
用於循環體中,退出整個循環。
break [N],提早結束第N層循環,最內層爲第1層。
shift
用於將參量列表list左移指定次數,缺省爲左移一次。
shift [n],移動N個位置,參量列表list 一旦被移動,最左端的那個參數就從列表中刪除。
while 到循環遍歷位置參量列表時,經常使用到 shift。
$1=a, $2=b, $c=d
shift
$1=b, $2=d
shift
$1=d
wait
用於等待命令執行結束,並exit 退出
select 變量名 in LIST ; do
循環體命令
done
select 循環主要用於建立菜單,按數字順序排列的菜單項將顯示在標準錯誤上,並顯示 PS3 提示符,等待用戶輸入。
用戶輸入菜單列表中的某個數字,執行相應的命令。
用戶輸入被保存在內置變量 REPLY中。
PS3="INPUT:"
select menu in bai hei hong lv;do
echo $menu
done
select與case的對比
select 是個無限循環,所以要記住用 break令退出循環,或用 exit命令終止腳本,也能夠按 ctrl+c退出循環。
select 常常和 case 聯合使用
與for循環相似,能夠省略in LIST,此時使用位置參量。
trap ' 觸發指令' 信號
自定義進程收到系統發出的指定信號後,將執行觸發指令,而不會執行原操做。
trap ' ' 信號
忽略信號的操做
trap '-' 信號
恢復原信號的操做
trap -p
列出自定義信號操做
trap 示例
#!/bin/bash
trap 'echo 「signal:SIGINT"' int
trap -p
for((i=0;i<=10;i++))
do
sleep 1
echo $i
done
trap '' int
trap -p
for((i=11;i<=20;i++))
do
sleep 1
echo $i
done
trap '-' int
trap -p
for((i=21;i<=30;i++))
do
sleep 1
echo $i
done