在shell的語句中,流程控制主要分為兩種:
簡單流程控制語句:選擇和迴圈
複雜流程控制語句:函式
4.1 簡單流程控制語句
4.1.1 單分支if語句
語法格式
if [ 條件 ]
then
指令fi
場景:單一條件,只有乙個輸出
單分支if語句示例
#!/bin/bash
if [ 「$1」 == 「nan」 ]
then
echo 「您的性別是 男」
fi4.1.2 雙分支if語句
語法格式
if [ 條件 ]
then
指令1else
指令2fi
場景:乙個條件,兩種結果
雙分支if語句示例
#!/bin/bash
if [ 「$1」 == 「nan」 ]
then
echo 「您的性別是 男」
else
echo 「您的性別是 女」
fi4.1.3 多分支if語句
語法格式
if [ 條件 ]
then
指令1elif [ 條件2 ]
then
指令2else
指令3fi
場景:n個條件,n+1個結果
多分支if語句示例
#!/bin/bash
多if語句生產場景: 服務的啟動
需求:要求指令碼執行需要有引數,通過傳入引數來實現不同的功能。
引數和功能詳情如下:
引數 執行效果
start 服務啟動中…
stop 服務關閉中…
restart 服務重啟中…
* 指令碼 x.sh 使用方式 x.sh [ start|stop|restart ]
指令碼內容
admin-1@ubuntu:/data/scripts/python-n# cat if.sh
#!/bin/bash
if [ 「$1」 == 「start」 ]
then
echo 「服務啟動中…」
elif [ 「$1」 == 「stop」 ]
then
echo 「服務關閉中…」
elif [ 「$1」 == 「restart」 ]
then
echo 「服務重啟中…」
else
echo 「$0 指令碼的使用方式: $0 [ start | stop | restart ]」
fi4.1.4 case選擇語句
我們發現多if語句使用的時候,**量很多,而且整體看起來確實有那麼一丁點亂,有沒有辦法更好的實現這種效果呢?就是case語句。
case 語句格式
case 變數名 in
值1)指令1
;;值2)
指令2;;
值3)指令3
;;esac
注意:首行關鍵字是case,末行關鍵字esac
選擇項後面都有 )
每個選擇的執行語句結尾都有兩個分號;
case語句示例
場景:在多if語句的基礎上對指令碼進行公升級
需求:要求指令碼執行需要有引數,通過傳入引數來實現不同的功能。
引數和功能詳情如下:
引數 執行效果
start 服務啟動中…
stop 服務關閉中…
restart 服務重啟中…
* 指令碼 x.sh 使用方式 x.sh [ start|stop|restart ]
指令碼內容:
#!/bin/bash
4.1.5 for迴圈語句
迴圈指定的所有元素,迴圈完畢之後就推出
語法格式
語法格式
for 值 in 列表
do執行語句
done
場景:遍歷列表
注意:」for」 迴圈總是接收 「in」 語句之後的某種型別的字列表
執行次數和list列表中常數或字串的個數相同,當迴圈的數量足夠了,就自動退出
示例:遍歷檔案
#!/bin/bash
for i in (ls
/roo
t)do
echo
"(ls /root) do echo "
(ls/ro
ot)d
oech
o""done
4.1.6 while迴圈語句
語法格式
while 條件
do執行語句
done
注意:條件的型別:
命令、[[ 字串表示式 ]]、(( 數字表示式 ))
場景:只要條件滿足,就一直迴圈下去
while語句示例
指令碼內容
#!/bin/bash
a=1while [ 「a"−
lt5]
doec
ho
"" -lt 5 ] do echo "
a"−lt5
]doe
cho"
」a=$((a+1))
done
4.1.7 until迴圈語句
語法格式
until 條件
do執行語句
done
注意:條件的型別:
命令、[[ 字串表示式 ]]、(( 數字表示式 ))
場景:只要條件不滿足,就一直迴圈下去
until語句示例
指令碼內容
#!/bin/bash
a=1until [ 「a"−
eq5]
doec
ho
"" -eq 5 ] do echo "
a"−eq5
]doe
cho"
」a=$((a+1))
done
4.2 複雜流程控制語句
函式就是我們的複雜流程控制語句
4.2.1 函式基礎知識
函式是什麼?
函式就是將某些命令組合起來實現某一特殊功能的方式,是指令碼編寫中非常重要的一部分。
簡單函式格式:
定義函式:
函式名()
呼叫函式:
函式名傳參函式格式:
傳引數函式名 引數
函式體呼叫引數:
函式名()
注意:類似於shell內建變數中的位置引數
4.2.2 函式實踐
簡單函式定義和呼叫示例
#!/bin/bash
dayin()
dayin
函式傳參和函式體內呼叫引數示例
#!/bin/bash
dayin()
dayin 111
函式呼叫指令碼傳參
#!/bin/bash
dayin()
dayin $1
指令碼傳多參,函式分別呼叫示例
#!/bin/bash
4.3 第一階段綜合案例
需求1、zonghe.sh 指令碼執行時候需要新增引數才能執行
引數和功能詳情如下:
引數 執行效果
start 服務啟動中…
stop 服務關閉中…
restart 服務重啟中…
* 指令碼幫助資訊…
2、引數的數量有限制,只能是1個,多餘乙個會提示指令碼的幫助資訊
3、幫助資訊使用函式來實現
資訊內容:指令碼 zonghe.sh 使用方式 zonghe.sh [ start|stop|restart ]
知識點分析:
1、zonghe.sh 指令碼執行時候需要新增引數才能執行
指令碼傳參、case語句
2、引數的數量有限制,只能是1個,多餘乙個會提示指令碼的幫助資訊
引數數量、條件表示式(驗證+數字)、if語句
3、幫助資訊使用函式來實現
函式定義+呼叫
4、if語句和case語句巢狀
if語句在外,case語句在內
指令碼編寫流程:
1、先寫主流程框架
2、完善函式功能
3、完善需求功能
**實踐
#!/bin/bash
arg="$1"
usage()
if [ katex parse error: expected 'eof', got '#' at position 1: #̲ -eq 1 ] then …" in
start)
echo 「服務啟動中…」
;;stop)
echo 「服務關閉中…」
;;restart)
echo 「服務重啟中…」
;;*)
usage
;;esac
else
usage
fi
Shell流程控制
case迴圈 if condition condition then statements if true 1 elif condition condition then statements if true 2 else statements if all else fails fi注 方括號中的...
Shell 流程控制
shell的流程控制不可為空,如果else分支沒有語句執行,就不要寫這個else。if 語句語法格式 if condition then command1 command2 commandn fi寫成一行 適用於終端命令提示符 if ps ef grep c ssh gt 1 then echo t...
Shell流程控制
shell 流程控制 if else if語法格式 if condition then command1 command2 fi 末尾的fi就是if倒過來拼寫 if else語法 if condition then command1 command2 else command1 fi if else...