shell流程控制

2021-09-13 14:27:04 字數 4356 閱讀 3547

在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...