流程控制 if分支結構

2021-10-22 23:11:09 字數 4783 閱讀 5995

摘要:就像其他程式語言,shell指令碼程式也提供了分支。

舉個例子:

x=5if[

$x= 5 ]

;then

echo

"x equals 5."

else

echo

"x does not equal 5."

fi

if 語句語法如下:

if commands;

then

commands

[elif commands;

then

commands...]

[else

commands]

fi

commands 是指一系列命令。

當命令執行完畢後,命令(包括我們編寫的指令碼和 shell 函式)會給系統傳送乙個值,叫做退出狀態。這個值是乙個 0 到 255 之間的整數,說明命令執行成功或是失敗。按照慣例,乙個零值說明成功,其它所有值說明失敗。shell 提供了乙個引數,我們可以用它檢查退出狀態。用具體例項看一下:

xuxg@xuxg-ubuntu:~$ ls -d /usr/bin

/usr/bin

xuxg@xuxg-ubuntu:~$ echo$?0

xuxg@xuxg-ubuntu:~$ ls -d /bin/usr

ls: cannot access '/bin/usr'

: no such file or directory

xuxg@xuxg-ubuntu:~$ echo

$?2

shell 提供了兩個極其簡單的內部命令,它們不做任何事情,除了以乙個 0 或 1 退出狀態來終止執行。true 命令總是執行成功,而 false 命令總是執行失敗:

xuxg@xuxg-ubuntu:~$ true

xuxg@xuxg-ubuntu:~$ echo$?0

xuxg@xuxg-ubuntu:~$ false

xuxg@xuxg-ubuntu:~$ echo

$?1

我們能夠使用這些命令,來看一下 if 語句是怎樣工作的。if 語句真正做的事情是計算命令執行成功或失敗:

xuxg@xuxg-ubuntu:~$ if

true

;then

echo

"it's true.";fi

it's true.

xuxg@xuxg-ubuntu:~$ if false; then echo "it's true.";

fixuxg@xuxg-ubuntu:~$

如果 if 之後跟隨一系列命令,則將計算列表中的最後乙個命令:

xuxg@xuxg-ubuntu:~$ if

false

;true

;then

echo

"it's true.";fi

it's true.

xuxg@xuxg-ubuntu:~$ if true; false; then echo "it's true.";

fixuxg@xuxg-ubuntu:~$

經常與 if 一塊使用的命令是 test。這個 test 命令執行各種各樣的檢查與比較。它有兩種等價模式:

test expression
比較流行的格式是:

[ expression ]
這裡的 expression 是乙個表示式,其執行結果是 true 或者是 false。當表示式為真時,這個test 命令返回乙個零退出狀態,當表示式為假時,test 命令退出狀態為 1。

以下表示式被用來計算檔案狀態:

表示式如果下列條件為真則返回 true

file1 -ef file2

file1 和 file2 擁有相同的索引號(通過硬鏈結兩個檔名指向相同的檔案)。

file1 -nt file2

file1 新於 file2。

file1 -ot file2

file1 早於 file2。

-b file

file 存在並且是乙個塊(裝置)檔案。

-c file

file 存在並且是乙個字元(裝置)檔案。

-d file

file 存在並且是乙個目錄。

-e file

file 存在。

-f file

file 存在並且是乙個普通檔案。

-g file

file 存在並且設定了組 id。

-g file

file 存在並且由有效組 id 擁有。

-k file

file 存在並且設定了它的「sticky bit」。

-l file

file 存在並且是乙個符號鏈結。

-o file

file 存在並且由有效使用者 id 擁有。

-p file

file 存在並且是乙個命名管道。

-r file

file 存在並且可讀(有效使用者有可讀許可權)。

-s file

file 存在且其長度大於零。

-s file

file 存在且是乙個網路 socket。

-t fd

fd 是乙個定向到終端/從終端定向的檔案描述符。這可以被用來決定是否重定向了標準輸入/輸出錯誤。

-u file

file 存在並且設定了 setuid 位。

-w file

file 存在並且可寫(有效使用者擁有可寫許可權)。

-x file

file 存在並且可執行(有效使用者有執行/搜尋許可權)。

以下表示式用來計算字串:

表示式如果下列條件為真則返回 true

string

string 不為 null。

-n string

字串 string 的長度大於零。

-z string

字串 string 的長度為零。

string1 = string2或string1 == string2

string1 和 string2 相同。單或雙等號都可以,不過雙等號更受歡迎。

string1 != string2

string1 和 string2 不相同。

string1 > string2

sting1 排列在 string2 之後。

string1 < string2

string1 排列在 string2 之前。

警告:當與 test 一塊使用的時候,> 和 < 表示式操作符必須用引號引起來(或者是用反斜槓轉義)。如果不這樣,它們會被 shell 解釋為重定向操作符,造成潛在的破壞結果。

下面的表示式用於整數:

表示式如果為真…

integer1 -eq integer2

integer1 等於 integer2。

integer1 -ne integer2

integer1 不等於 integer2。

integer1 -le integer2

integer1 小於或等於 integer2。

integer1 -lt integer2

integer1 小於 integer2。

integer1 -ge integer2

integer1 大於或等於 integer2。

integer1 -gt integer2

integer1 大於 integer2。

目前的 bash 版本包括乙個復合命令,作為加強的 test 命令替代物。它使用以下語法:

[

[ expression ]

]

這裡,類似於 test,expression 是乙個表示式,其計算結果為真或假。這個 [[ ]] 命令非常相似於 test 命令(它支援所有的表示式),但是增加了乙個重要的新的字串表示式:

string1 =~ regex
如果 string1 匹配擴充套件的正規表示式 regex,其返回值為真。

[[ ]] 新增的另乙個功能是 == 操作符支援型別匹配,正如路徑名展開所做的那樣。

除了 [[ ]] 復合命令之外,bash 也提供了 (( )) 復合命令,其有利於操作整數。它支援一套完整的算術計算。

(( )) 被用來執行算術真測試。如果算術計算的結果是非零值,則其測試值為真。

通過使用邏輯操作符來結合表示式

操作符測試

[[ ]] and (( ))

and-a

&&or

-o||

not!

!bash 支援兩種可以執行分支任務的控制操作符。&&(and)和 ||(or)操作符作用如同復合命令 [[ ]] 中的邏輯操作符。這是語法:

command1 && command2

command1 || command2
理解這些操作很重要。對於 && 操作符,先執行 command1,如果並且只有如果 command1執行成功後,才會執行 command2。對於 || 操作符,先執行 command1,如果並且只有如果command1 執行失敗後,才會執行 command2。

本章學習了shell程式設計的if分支結構等內容。

流程控制,及分支結構

迴圈 巢狀迴圈 外迴圈內迴圈 外迴圈執行一次,內迴圈執行一遍 while while forfor while forfor while 對於未知迴圈 傾向於用while迴圈 列印矩形 列印直角三角形 列印空心的以上圖形 列表的使用 定義 list1 特性 可以儲存任意型別多個資料 允許存在重複元素...

流程控制語句 分支結構案例

需求 通過鍵盤錄入乙個整數,請用程式實現判斷該整數是奇數還是偶數,並在控制台輸出該整數是奇數還是偶數。分析 為了體現任意給出乙個整數,採用鍵盤錄入乙個資料 判斷整數是偶數還是奇數要分兩種情況進行判斷,使用if else結構 判斷是否偶數需要使用取餘運算子實現該功能 number 2 0 根據判定情況...

js流程控制 分支

流程控制 在乙個程式執行的過程中,各條 的執行順序對程式的結果是有直接影響的,很多時候我們要通過控制 的執行順序來實現我們要完成的功能 簡單理解 流程控制就是來控制我們的 按照什麼結構順序來執行。有順序結構,分支結構,迴圈結構 switch與if else if的區別 1,一般情況下,他們兩個語句可...