shell流程控制語句

2021-09-12 11:00:11 字數 4191 閱讀 1528

任何程式語言都離不開流程控制語句,其實程式設計基本上就是掌握了流程控制語句,然後加上函式(或者是方法)以及變數基本就差不多了,語法的東西很少,主要還是處理邏輯。所以,邏輯思維很重要。

對於計算機來說,它只知道有或者沒有,是正或者是負,有電或者沒電,其實就是1和0的事兒。因此,if語句很重要,但又很簡單,不過shell又很多不好的地方,用了之後的同事都說沒有python和perl好用。

來看看shell中if語句的格式吧。

if else

if格式有點像下面這種

if condition

then

command1

command2

...commandn

fi

例如

#!/bin/bash

a=3#eq 是表示相等的意思

#這裡一定要注意括號和變數要用空格,空號和if之間也要有空格

if [ $a eq 3 ];then

echo "a equal 3"

fi

來看看第二種

這種是含有else的,就是可以有多個分支。

if condition

then

command1

command2

...commandn

else

command

fi

我們還是用上面那個例子看看

#!/bin/bash

a=3#eq 是表示相等的意思

#這裡一定要注意括號和變數要用空格,空號和if之間也要有空格

if [ $a eq 3 ];then

echo "a equal 3"

else

echo "a not equal 3"

fi

上面這裡也可以寫成這樣

#!/bin/bash

a=3#eq 是表示相等的意思

#這裡一定要注意括號和變數要用空格,空號和if之間也要有空格

#如果我們把then另起一行的話,if那一行就不需要用分號結尾了

if [ $a eq 3 ]

then

echo "a equal 3"

else

echo "a not equal 3"

fi

就是這麼簡單。

這裡可以判斷兩個分支了,那我們來看看能不能使用判斷多個分支的。

if condition1

then

command1

elif condition2

then

command2

else

commandn

fi

這裡的下面這個條件可以無限迴圈下去,你想寫多少個分支就寫多少個分支

elif condition2 

then

來看乙個例子,判斷兩個變數是否相等:

#!/bin/bash

a=3b=2

#這裡一定要注意括號和變數要用空格,空號和if之間也要有空格

#如果我們把then另起一行的話,if那一行就不需要用分號結尾了

if [ $a == $b ]

then

echo "a 等於 b"

elif [ $a -gt $b ]

then

echo "a 大於 b"

elif [ $a -lt $b ]

then

echo "a 小於 b"

else

echo "沒有符合的條件"

fi

其實雖然說有三種,但是只要我們掌握第三種就可以了。

你要是細心一點,就會發現第三種已經包含第一種和第二種了。

另外,還有一些if的複雜使用(其實這個已經不算是語法問題了),比方說if多個條件判斷,if語句巢狀(if語句裡面又要判斷)等等這些,等我們講完所有的shell語句之後來乙個大例子把這些都包含進去。

for語句就沒有那麼多中情況了,只有一種語法:

for var in item1 item2 ... itemn

do command1

command2

...commandn

done

來看幾個例子

列印輸出1到5

for loop in 1 2 3 4 5

do echo "the value is: $loop"

done

輸出

the value is: 1

the value is: 2

the value is: 3

the value is: 4

the value is: 5

計算1到100的和

#!/bin/bash

sum=0

for i in

do let sum=sum+$i

done

echo $sum

輸出 5050

也可以寫成這樣

#!/bin/bash

sum=0

for i in `seq 1 100`

do let sum=sum+$i

done

echo $sum

while語句和for語句差不多的。

滿足condition的時候 會做command的操作。

while condition

do command

done

來用while實現列印1到5,實現了這個你就可以用迴圈列印任意範圍的數字了。

#!/bin/bash

int=1

while(( $int<=5 ))

do echo $int

let "int++"

done

執行指令碼,輸出:

123

45

說一下這的let命令,它用於執行乙個或多個表示式,變數計算中不需要加上 $ 來表示變數。

let 命令是 bash 中用於計算的工具,用於執行乙個或多個表示式,變數計算中不需要加上 $ 來表示變數。如果表示式中包含了空格或其他特殊字元,則必須引起來。

格式如下:

let arg [arg …]

例項:自加操作:let no++

自減操作:let no–

簡寫形式 let no+=10,let no-=20,分別等同於 let no=no+10,let no=no-20。

以下例項計算 a 和 b 兩個表示式,並輸出結果:

#!/bin/bash

let a=5+4

let b=9-3

echo $a $b

輸出結果為:

9 6
無限迴圈就是這個程式在這個迴圈中一直執行,不會退出。

while :

do command

done

或者是

while :

do command

done

或者是for語句的

for (( ; ; ))
程式在執行的時候,有時候需要還沒有到達迴圈末尾的時候就退出迴圈,比方我們在乙個檔案當中查詢pason這個詞,如果找到了,就退出了,找不到,就一直找下去,知道檔案結尾。

假如我們只需要找到乙個pason就退出了,這個時候我們就可以用break,這個可以退出整個迴圈。

假如我們要找到在乙個資料夾中查詢,每個檔案中都要求找到乙個pason即可。

那這個就是迴圈套迴圈了,如果我們在檔案a中找到了pason,那檔案a中就不需要找了,直接進入下次迴圈,進入檔案b中去,這個時候可以用continue。

continue退出本次迴圈,進入下乙個迴圈。

break 退出當前迴圈

Shell流程控制語句

在linux shell程式設計中,if for while case等條件流程控制語句用的非常多,把這些學好,對提公升指令碼的功力有非常大的幫助。下面將逐個來講解具體的用法 if 表示式 if variable in array 語句1else 語句2fi 案例一,測試數字大小 bin sh nu...

Shell基礎 流程控制語句

0 表示當前指令碼檔案的名稱 獲取當前指令碼有多少個引數 對應所有引數的值 n 對應第n個引數的值 表示當前指令碼執行結果 0表示成功,非0表示失敗 有兩種方式 a.test 命令 b.w test.sh 引數 檔名 2.1 檔案測試 2.2 邏輯測試 與 或 非 2.3 整數值比較測試 2.4 字...

shell 之 流程控制語句if

if 條件 then commands fi bin bash ifls shell then echo there is a dir named shell fi執行結果 注 根據我們命令退出的碼來進行判斷 是否為 0 如果是0,那麼就會執行then後面的命令 if 條件 then command...