今天我們介紹一下如何在 bash 中使用條件語(yǔ)句。
在 bash 中使用 if 語(yǔ)句
在絕大多數(shù)編程語(yǔ)言中,if 語(yǔ)句都是最基本的條件語(yǔ)句。在 bash 中其語(yǔ)法如下:
if [ condition ]; then
your code
fi
if 語(yǔ)句以 fi(與if相反)結(jié)束。
注意空格:
- 在開(kāi)始括號(hào)之后,與結(jié)束括號(hào)之前,都必須要有一個(gè)空格,否則 shell 將報(bào)錯(cuò);
- 條件運(yùn)算符(=,==,<=等)前后必須有空格,否則將報(bào)錯(cuò)。
我們創(chuàng)建一個(gè)示例腳本 root.sh,當(dāng)你以 root 身份運(yùn)行該腳本的時(shí)候,才會(huì)進(jìn)入 if 語(yǔ)句:
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "You are root"
fi
whoami 命令輸出當(dāng)前用戶名。在 bash 變量教程中,我們介紹了 $(command) 結(jié)構(gòu)的語(yǔ)法用于命令替換。
所以,當(dāng)你以 root 用戶身份登錄時(shí),條件 $(whoami) = 'root' 才為真。
if-else 語(yǔ)句
上述代碼中,如果當(dāng)前用戶不是 root,將看不到任何輸出。當(dāng) if 條件為 false 的時(shí)候,需要將其執(zhí)行的代碼放到 else 語(yǔ)句中,如下所示:
#!/bin/bash
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
此時(shí),當(dāng)你以普通用戶運(yùn)行腳本的時(shí)候,會(huì)輸出 You are not root,如下所示:
$ ./root.sh
You are not root
使用 else if 語(yǔ)句
當(dāng)有多個(gè)表達(dá)式(條件)時(shí),可以使用 elif(else-if)語(yǔ)句。看下面的例子,我們創(chuàng)建一個(gè)名為 age.sh 的腳本:
#!/bin/bash
AGE=$1
if [ $AGE -lt 13 ]; then
echo "You are a kid."
elif [ $AGE -lt 20 ]; then
echo "You are a teenager."
elif [ $AGE -lt 65 ]; then
echo "You are an adult."
else
echo "You are an elder."
fi
上述代碼中的 -lt 即小于(less than)。在前面的文章中我們介紹過(guò)如何給 bash 腳本傳遞參數(shù),現(xiàn)在我們運(yùn)行一下 age.sh,并傳遞不同的參數(shù):
$ ./age.sh 11
You are a kid.
$ ./age.sh 18
You are a teenager.
$ ./age.sh 44
You are an adult.
$ ./age.sh 70
You are an elder.
需要注意的是,在條件語(yǔ)句中,可以有多個(gè) elif ,但是只能有一個(gè) else,且必須使用 fi 關(guān)閉。
在 bash 中嵌套使用 if 語(yǔ)句
if 語(yǔ)句可以嵌套使用。看如下 weather.sh 腳本:
#!/bin/bash
TEMP=$1
if [ $TEMP -gt 5 ]; then
if [ $TEMP -lt 15 ]; then
echo "The weather is cold."
elif [ $TEMP -lt 25 ]; then
echo "The weather is nice."
else
echo "The weather is hot."
fi
else
echo "It's freezing outside ..."
fi
上述腳本接受溫度作為參數(shù),然后顯示一條反應(yīng)天氣情況的信息。當(dāng)溫度大于 5 度的時(shí)候,就會(huì)進(jìn)入嵌套的 if 語(yǔ)句。我們運(yùn)行一下該腳本:
$ ./weather.sh 0
It's freezing outside ...
$ ./weather.sh 8
The weather is cold.
$ ./weather.sh 16
The weather is nice.
$ ./weather.sh 30
The weather is hot.
在 bash 中使用 case 語(yǔ)句
我們還可以在 bash 中使用 case 語(yǔ)句來(lái)替換多個(gè) if 語(yǔ)句,其構(gòu)造的一般語(yǔ)法如下:
case "variable" in
"pattern1" )
Command … ;;
"pattern2" )
Command … ;;
"pattern2" )
Command … ;;
esac
注意:
- 條件語(yǔ)句最后總會(huì)包含一個(gè)空格和右括號(hào) );
- 條件語(yǔ)句后的命令以?xún)蓚€(gè)分號(hào) ;; 結(jié)束,其前面的空格可有可沒(méi)有;
- case 語(yǔ)句 以 esac 結(jié)尾(與 case 相反)。
case 語(yǔ)句在處理模式匹配或正則表達(dá)式的時(shí)候特別有用。作為演示,我們創(chuàng)建一個(gè)名為 char.sh 的腳本:
#!/bin/bash
CHAR=$1
case $CHAR in
[a-z])
echo "Small Alphabet." ;;
[A-Z])
echo "Big Alphabet." ;;
[0-9])
echo "Number." ;;
*)
echo "Special Character."
esac
上述腳本接受一個(gè)字符作為參數(shù),并顯示該字符是大寫(xiě)字母,還是小寫(xiě)字母、數(shù)字還是特殊字符。
$ ./char.sh a
Small Alphabet.
$ ./char.sh Z
Big Alphabet.
$ ./char.sh 7
Number.
$ ./char.sh $
Special Character.
上述腳本中我使用了通配符 * 來(lái)定義默認(rèn)字符,它相當(dāng)于 if 語(yǔ)句中的 else 語(yǔ)句。
bash 中的測(cè)試條件
有許多測(cè)試條件可以與 if 語(yǔ)句一起使用。如果使用數(shù)字、字符串或文件,測(cè)試條件會(huì)有所不同。將它們視為bash中的邏輯運(yùn)算符。
下表列出一些最常用的測(cè)試條件:
條件 | 相當(dāng)于 |
---|---|
a -ltb | **a <**b |
a -gtb | **a >**b |
a -leb | **a <=**b |
a -geb | **a >=**b |
a -eqb | a 等于b |
a -neb | a 不等于b |
-e**FILE | **FILE 存在 |
-d**FILE | **FILE 存在且是一個(gè)目錄. |
-f**FILE | **FILE 存在且是一個(gè)常規(guī)文件. |
-L**FILE | **FILE 存在且是一個(gè)軟鏈接. |
**STRING1 =**STRING2 | STRING1 等于STRING2 |
**STRING1 !=**STRING2 | STRING1 不等于STRING2 |
-z**STRING1 | **STRING1 是空的 |
上面這些測(cè)試條件不需要專(zhuān)門(mén)記,可以在 man 手冊(cè)中查看:
$ man test
我們創(chuàng)建一個(gè)名為 filetype.sh 的腳本,用來(lái)檢查文件是常規(guī)文件、目錄還是軟鏈接:
#!/bin/bash
if [ $# -ne 1 ]; then
echo "Error: Invalid number of arguments"
exit 1
fi
file=$1
if [ -f $file ]; then
echo "$file is a regular file."
elif [ -L $file ]; then
echo "$file is a soft link."
elif [ -d $file ]; then
echo "$file is a directory."
else
echo "$file does not exist"
fi
在腳本的開(kāi)始,我們檢查一下參數(shù)的數(shù)量,如果沒(méi)有參數(shù)或者有多個(gè)參數(shù),腳本會(huì)輸出一條消息并退出。下面是運(yùn)行情況:
$ ./filetype.sh weather.sh
weather.sh is a regular file.
$ ./filetype.sh /bin
/bin is a soft link.
$ ./filetype.sh /var
/var is a directory.
$ ./filetype.sh
Error: Invalid number of arguments
在同一行中編寫(xiě) if else 語(yǔ)句
到目前為止,我們上述代碼都是在規(guī)范的縮進(jìn)格式下寫(xiě)的,這是一種規(guī)范的寫(xiě)法,但并不是非這樣寫(xiě)不可。
當(dāng)你只想在 shell 中看到結(jié)果時(shí),可以在單行中使用 if else 語(yǔ)句。
假設(shè)我們有如下腳本:
if [ $(whoami) = 'root' ]; then
echo "You are root"
else
echo "You are not root"
fi
可以在一行代碼中這樣寫(xiě):
if [ $(whoami) = 'root' ]; then echo "root"; else echo "not root"; fi
大家可以運(yùn)行一下上面的腳本,看看結(jié)果。
基本上,就是在命令結(jié)束后添加分號(hào) ; ,然后寫(xiě)下一條語(yǔ)句。
-
命令
+關(guān)注
關(guān)注
5文章
728瀏覽量
22671 -
腳本
+關(guān)注
關(guān)注
1文章
397瀏覽量
28341 -
Bash
+關(guān)注
關(guān)注
0文章
57瀏覽量
10394
發(fā)布評(píng)論請(qǐng)先 登錄
如何在bash shell腳本中使用變量

如何在bash腳本中創(chuàng)建第一個(gè)數(shù)組

如何在bash中使用運(yùn)算符來(lái)執(zhí)行算術(shù)運(yùn)算

鴻蒙TypeScript入門(mén)學(xué)習(xí)第6天:【條件語(yǔ)句】

JavaScript 【4】 條件語(yǔ)句
如何在C程序中使用匯編
條件判斷語(yǔ)句(if語(yǔ)句)

詳解Python條件語(yǔ)句
Verilog中的If語(yǔ)句和case語(yǔ)句介紹

條件語(yǔ)句/循環(huán)語(yǔ)句simulink的實(shí)現(xiàn)方法(一)

Python條件和條件語(yǔ)句
BASH shell腳本篇—條件命令

評(píng)論