目錄
1、if條件判斷語句
if語法
#!/bin/bash a=10 b=10 if [ $a -eq $b ];then echo "兩個數相等" fi # 輸出:兩個數相等
if else語法
#!/bin/bash string="hello" string1="HELLO" if test $string = $string1 then echo "兩個字串一樣" else echo "兩個字串不一樣" fi #輸出:兩個字串不一樣
if else-if else語法
以下範例判斷兩個變數是否相等:
if [ "xx" = "xx" ]; then echo "if" elif [ "xx" = "xx" ]; then echo "elseif" else echo "else" fi #輸出:if
2、test判斷
Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字元和檔案三個方面的測試。
數值測試
參數
說明
-eq
等於則爲真
-ne
不等於則爲真
-gt
大於則爲真
-ge
大於等於則爲真
-lt
小於則爲真
-le
小於等於則爲真
範例演示:
#!/bin/bash num1=100 num2=100 if test $[num1] -eq $[num2] then echo '兩個數相等!' else echo '兩個數不相等!' fi
字串測試
參數
說明
=
等於則爲真
!=
不相等則爲真
-z 字串
字串的長度爲零則爲真
-n 字串
字串的長度不爲零則爲真
範例演示:
#!/bin/bash num1="chenzhe" num2="chenzhe1" if test $num1 = $num2 then echo '兩個字串相等!' else echo '兩個字串不相等!' fi
檔案測試
參數
說明
-e 檔名
如果檔案存在則爲真
-r 檔名
如果檔案存在且可讀則爲真
-w 檔名
如果檔案存在且可寫則爲真
-x 檔名
如果檔案存在且可執行則爲真
-s 檔名
如果檔案存在且至少有一個字元則爲真
-d 檔名
如果檔案存在且爲目錄則爲真
-f 檔名
如果檔案存在且爲普通檔案則爲真
-c 檔名
如果檔案存在且爲字元型特殊檔案則爲真
-b 檔名
如果檔案存在且爲塊特殊檔案則爲真
範例演示:
#!/bin/bash cd /bin if test -e ./bash then echo '檔案已存在!' else echo '檔案不存在!' fi
另外,Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用於將測試條件連線起來,其優先順序爲:"!"最高,"-a"次之,"-o"最低。例如:
#!/bin/bash cd /bin if test -e ./notFile -o -e ./bash then echo '至少有一個檔案存在!' else echo '兩個檔案都不存在' fi
1、shell運算子
Shell 和其他程式語言一樣,支持多種運算子,包括:算數運算子、關係運算符、布爾運算子、字串運算子、檔案測試運算子
算術運算子
下表列出了常用的算術運算子,假定變數 a 爲 10,變數 b 爲 20:
運算子
說明
舉例
+
加法
`expr $a + $b` 結果爲 30。
-
減法
`expr $a - $b` 結果爲 -10。
*
乘法
`expr $a \* $b` 結果爲 200。
/
除法
`expr $b / $a` 結果爲 2。
%
取餘
`expr $b % $a` 結果爲 0。
=
賦值
a=$b 將把變數 b 的值賦給 a。
==
相等。用於比較兩個數位,相同則返回 true。
[ $a == $b ] 返回 false。
!=
不相等。用於比較兩個數位,不相同則返回 true。
[ $a != $b ] 返回 true。
範例
#!/bin/bash a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a \* $b` echo "a * b : $val" if [ $a == $b ] then echo "a 等於 b" fi if [ $a != $b ] then echo "a 不等於 b" fi
注意:條件表達式要放在方括號之間,並且要有空格,例如: [$a==$b] 是錯誤的,必須寫成 [ $a == $b ]。
乘號(*)前邊必須加反斜槓(\)才能 纔能實現乘法運算;`expr $a + $b`==$(($a+$b))
關係運算符
關係運算符只支援數位,不支援字串,除非字串的值是數位。
下表列出了常用的關係運算符,假定變數 a 爲 10,變數 b 爲 20:
運算子
說明
舉例
-eq
檢測兩個數是否相等,相等返回 true。
[ $a -eq $b ] 返回 false。
-ne
檢測兩個數是否不相等,不相等返回 true。
[ $a -ne $b ] 返回 true。
-gt
檢測左邊的數是否大於右邊的,如果是,則返回 true。
[ $a -gt $b ] 返回 false。
-lt
檢測左邊的數是否小於右邊的,如果是,則返回 true。
[ $a -lt $b ] 返回 true。
-ge
檢測左邊的數是否大於等於右邊的,如果是,則返回 true。
[ $a -ge $b ] 返回 false。
-le
檢測左邊的數是否小於等於右邊的,如果是,則返回 true。
[ $a -le $b ] 返回 true。
範例
#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo " a 等於 b" else echo " a 不等於 b" fi if [ $a -gt $b ] then echo "a 大於 b" else echo "a 不大於 b" fi if [ $a -lt $b ] then echo "a 小於 b" else echo "a 不小於 b" fi
邏輯運算子
以下介紹 Shell 的邏輯運算子,假定變數 a 爲 10,變數 b 爲 20:
運算子
說明
舉例
&&
邏輯的 AND
[[ $a -lt 100 && $b -gt 100 ]] 返回 false
||
邏輯的 OR
[[ $a -lt 100 || $b -gt 100 ]] 返回 true
範例
邏輯運算子範例如下:
#!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "返回 true" else echo "返回 false" fi
字串運算子
下表列出了常用的字串運算子,假定變數 a 爲 "abc",變數 b 爲 "efg":
運算子
說明
舉例
=
檢測兩個字串是否相等,相等返回 true。
[ $a = $b ] 返回 false。
!=
檢測兩個字串是否相等,不相等返回 true。
[ $a != $b ] 返回 true。
-z
檢測字串長度是否爲0,爲0返回 true。
[ -z $a ] 返回 false。
-n
檢測字串長度是否爲0,不爲0返回 true。
[ -n "$a" ] 返回 true。
$
檢測字串是否爲空,不爲空返回 true。
[ $a ] 返回 true。
範例
字串運算子範例如下:
#!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "a 等於 b" else echo " a 不等於 b" fi if [ -z $a ] then echo "字串長度爲 0" else echo " 字串長度不爲 0" fi if [ $a ] then echo "$a : 字串不爲空" else echo "$a : 字串爲空" fi
檔案測試運算子
檔案測試運算子用於檢測 Unix 檔案的各種屬性。
屬性檢測描述如下:
操作符
說明
舉例
-b file
檢測檔案是否是塊裝置檔案,如果是,則返回 true。
[ -b $file ] 返回 false。
-c file
檢測檔案是否是字元裝置檔案,如果是,則返回 true。
[ -c $file ] 返回 false。
-d file
檢測檔案是否是目錄,如果是,則返回 true。
[ -d $file ] 返回 false。
-f file
檢測檔案是否是普通檔案(既不是目錄,也不是裝置檔案),如果是,則返回 true。
[ -f $file ] 返回 true。
-g file
檢測檔案是否設定了 SGID 位,如果是,則返回 true。
[ -g $file ] 返回 false。
-k file
檢測檔案是否設定了粘着位(Sticky Bit),如果是,則返回 true。
[ -k $file ] 返回 false。
-p file
檢測檔案是否是有名管道,如果是,則返回 true。
[ -p $file ] 返回 false。
-u file
檢測檔案是否設定了 SUID 位,如果是,則返回 true。
[ -u $file ] 返回 false。
-r file
檢測檔案是否可讀,如果是,則返回 true。
[ -r $file ] 返回 true。
-w file
檢測檔案是否可寫,如果是,則返回 true。
[ -w $file ] 返回 true。
-x file
檢測檔案是否可執行,如果是,則返回 true。
[ -x $file ] 返回 true。
-s file
檢測檔案是否爲空(檔案大小是否大於0),不爲空返回 true。
[ -s $file ] 返回 true。
-e file
檢測檔案(包括目錄)是否存在,如果是,則返回 true。
[ -e $file ] 返回 true。
範例
變數 file 表示檔案/root/install.log,它的大小爲 100 位元組,具有 rwx 許可權。下面 下麪的程式碼,將檢測該檔案的各種屬性:
#!/bin/bash file="/root/install.log" if [ -r $file ] then echo "檔案可讀" else echo "檔案不可讀" fi if [ -w $file ] then echo "檔案可寫" else echo "檔案不可寫" fi if [ -x $file ] then echo "檔案可執行" else echo "檔案不可執行" fi if [ -f $file ] then echo "檔案爲普通檔案" else echo "檔案爲特殊檔案" fi if [ -d $file ] then echo "檔案是個目錄" else echo "檔案不是個目錄" fi if [ -e $file ] then echo "檔案存在" else echo "檔案不存在" fi
2、shell回圈語句
for語句,案例:
#!/bin/bash for num in 1 2 3 4 5 do echo "The value is: $num" done
順序輸出字串中的字元:
for str in 'This is a string' do echo $str done
while 語句
while回圈用於不斷執行一系列命令,也用於從輸入檔案中讀取數據;命令通常爲測試條件。
以下是一個基本的while回圈,測試條件是:如果int小於等於5,那麼條件返回真。int從0開始,每次回圈處理時,int加1。執行上述指令碼,返回數位1到5,然後終止。
#!/bin/bash int=1 while(( $int<=5 )) do echo $int let "int++" done
另外:while回圈可用於讀取鍵盤資訊。下面 下麪的例子中,輸入資訊被設定爲變數FILM,按<Ctrl-D>結束回圈。
#!/bin/bash echo -n '輸入你最喜歡的老師名: ' while read person do echo "是的!$person 是一個好人" done
無限回圈
無限回圈語法格式:
while : do command done 或者 while true do command done
until 回圈
until 回圈執行一系列命令直至條件爲 true 時停止。
until 回圈與 while 回圈在處理方式上剛好相反。
以下範例我們使用 until 命令來輸出 0 ~ 9 的數位:
#!/bin/bash a=0 until [ ! $a -lt 10 ] do echo $a a=`expr $a + 1` done
case多選擇語句
Shell case語句爲多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令
下面 下麪的指令碼提示輸入1到4,與每一種模式進行匹配:
echo '輸入 1 到 4 之間的數位:' echo '你輸入的數位爲:' read num case $num in 1) echo '你選擇了 1' ;; 2) echo '你選擇了 2' ;; 3) echo '你選擇了 3' ;; 4) echo '你選擇了 4' ;; *) echo '你沒有輸入 1 到 4 之間的數位' ;; esac
break命令
break命令允許跳出所有回圈(終止執行後面的所有回圈)。
下面 下麪的例子中,指令碼進入死回圈直至使用者輸入數位大於5。要跳出這個回圈,返回到shell提示符下,需要使用break命令。
#!/bin/bash while : do echo -n "輸入 1 到 5 之間的數位:" read num case $num in 1|2|3|4|5) echo "你輸入的數位爲 $aNum!" ;; *) echo "你輸入的數位不是 1 到 5 之間的! 遊戲結束" break ;; esac done
linux shell 可以使用者定義函數,然後在shell指令碼中可以隨便呼叫。
舉例:
#!/bin/bash sayHi(){ echo "hello 1906" } sayHi
下面 下麪定義一個帶有return語句的函數:
#!/bin/bash funWithReturn(){ echo "這個函數會對輸入的兩個數位進行相加運算..." echo "輸入第一個數位: " read num1 echo "輸入第二個數位: " read num2 echo "兩個數位分別爲 $num1 和 $num2 " return $(($num1+$num2)) } funWithReturn echo "輸入的兩個數位之和爲 $? "
函數參數
在Shell中,呼叫函數時可以向其傳遞參數。在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
帶參數的函數範例:
#!/bin/bash funWithParam(){ echo "第一個參數爲 $1 " echo "第二個參數爲 $2 " echo "第十個參數爲 $10 " echo "第十個參數爲 ${10} " echo "第十一個參數爲 ${11} " echo "參數總數有 $# 個" echo "作爲一個字串輸出所有參數 $* " } funWithParam 1 2 3 4 5 6 7 8 9 34 73
注意:$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。
總結不易,期待您的關注,我們一起進步,沖沖衝!!!