shell指令碼學習 (三)基本運算子 流程控制

2021-08-21 21:41:42 字數 3849 閱讀 1963

val=`expr 2 + 2`

echo "兩數之和為 : $val"

關係運算子只支援數字,不支援字串,除非字串的值是數字。

下表列出了常用的關係運算子,假定變數 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。

假定變數 a 為 10,變數 b 為 20:

運算子說明舉例!

非運算,表示式為 true 則返回 false,否則返回 true。

[ ! false ] 返回 true。

-o或運算,有乙個表示式為 true 則返回 true。

[ $a -lt 20 -o $b -gt 100 ] 返回 true。

-a與運算,兩個表示式都為 true 才返回 true。

[ $a -lt 20 -a $b -gt 100 ] 返回 false。

假定變數 a 為 10,變數 b 為 20:

運算子說明

舉例&&

邏輯的 and

[[ $a -lt 100 && $b -gt 100 ]] 返回 false

||邏輯的 or

[[ $a -lt 100 || $b -gt 100 ]] 返回 true

假定變數 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。

str檢測字串是否為空,不為空返回 true。

[ $a ] 返回 true。

變數 file 表示檔案"/var/www/runoob/test.sh",它的大小為100位元組,具有 rwx 許可權

操作符說明

舉例-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。

if condition

then

command1

command2

...commandn

fi

if condition

then

command1

command2

...commandn

else

command

fi

if condition1

then

command1

elif condition2

then

command2

else

commandn

fi

for var in item1 item2 ... itemn

do command1

command2

...commandn

done

例如:

for loop in 1 2 3 4 5

do echo "the value is: $loop"

done

while condition

do command

done

until 迴圈執行一系列命令直至條件為 true 時停止。

until condition

do command

done

case 值 in

模式1)

command1

command2

...commandn

;;模式2)

command1

command2

...commandn

;;esac

echo '輸入 1 到 4 之間的數字:'

echo '你輸入的數字為:'

read anum

case $anum in

1) echo '你選擇了 1'

;;2) echo '你選擇了 2'

;;3) echo '你選擇了 3'

;;4) echo '你選擇了 4'

;;*) echo '你沒有輸入 1 到 4 之間的數字'

;;esac

break命令允許跳出所有迴圈(終止執行後面的所有迴圈)。continue命令與break命令類似,只有一點差別,它不會跳出所有迴圈,僅僅跳出當前迴圈。

shell 指令碼運算子

1 數值 格式 test num1 opr num2 num1 opr num2 opr 取值 相等 eq 不等 ne 大於 gt 小於 lt l是字母l的小寫 小於等於 le 大於等於 ge 2 字串 格式 str1 opr str2 opr str opr取值 相等 不等 空串 z 非空串 n ...

shell指令碼 運算子

bin bash val expr 2 2 echo 兩數之和為 val 兩數之和為 4注意 表示式和運算子之間要有空格,例如 2 2 是不對的,必須寫成 2 2,這與我們熟悉的大多數程式語言不一樣。完整的表示式要被 空格包含,注意這個字元不是常用的單引號,在 esc 鍵下邊。bin bash ex...

Shell 基本運算子

好久沒用過shell了,最近複習下。扣了幾張老大部落格的圖嘿嘿.shell 和其他程式語言一樣,支援多種運算子,包括 原生bash不支援簡單的數 算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。expr 是一款表示式計算工具,使用它能完成表示式的求值操作。示例 root...