1.概述
接上一篇的shell變量,本篇將講解shell的條件判斷。條件分支語句在shell編程中使用較爲廣泛,本來接收單分支和雙分支。秉承一個觀點:技巧不在多,實用就行。所以掌握一個技能,使用熟練。若真有其他需求再學習其他技能。
2.用法
單分支if語句
if 判斷條件; then
statement1
statement2
...
fi
雙分支if語句
if 判斷條件; then
statement1
statement2
...
else
statement3
statement4
...
fi
3.條件測試
條件測試只是判斷條件中的一種,也可以直接使用命令進行條件。
例如
# 傳遞一個用戶名參數給腳本,判斷此用戶的用戶名跟基本組的組名是否一致,並將結果顯示出來
#!/bin/bash
#判斷傳入的參數,用戶是否存在
if ! id $1 &>/dev/null; then
echo "No such user."
exit
fi
#判斷此用戶的用戶名跟基本組的組名是否一致
if [ `id -n -u $1` == `id -n -g $1` ];then
echo "Same"
else
echo "None"
fi
條件測試類型
- 整數測試
- 字符測試
- 文件測試
其中 條件測試的表示式
- [ expression ]
- [[ expression ]]
- test expression
ps:1."[[ ]]" bash的關鍵字
2.[ ] 與 expression 之間必須要有空格隔開
整數測試(雙目):
- -eq: 測試兩個整數是否相等 $A -eq $B
- -ne: 測試兩個整數是否不等
- -gt: 測試一個數是否大於另一個數
- -lt: 一個數是否小於另一個數
- -ge: >=
- -le : <=
INT1=61
INT2=63
1.[ $INT1 -eq $INT2 ]
2.[[ $INT1 -eq $INT2 ]]
3.test $INT1 -eq $INT2
字符測試
- string1 ==/= string2 判斷兩字符串是否相等
- string1 != string2 判斷兩字符串是否不等
- -n string 測試指定字符串是否爲空
- -s string 測試指定字符串是否不爲空
ps:1.[ $A = $B ] 等號兩端要有空格
文件測試
- -e FILE 測試文件是否存在
- -f FILE 測試文件是否爲普通文件
- -d FILE 測試指定路徑是否爲目錄
- -x FILE 測試當前用戶對指定文件是否有執行權限
- -r FILE 測試當前用戶對指定文件是否有讀權限
- -w FILE 測試當前用戶對指定文件是否有寫權限
[ -e /etc/inittab ]
[ -x /etc/rc.d/rc.sysinit ]
bash腳本的運行
1.編寫好腳本後添加執行權限
chmod +x xxx.sh
./xxx.sh
2.直接用打開新bash進程,通過傳參方式運行
bash xxx.sh
bash -n 腳本 測試腳本是否有錯誤
bash -x 腳本 單步執行腳本
組合條件測試
- -a 邏輯與 同時滿足 條件1 與 條件2 爲真
- -o 邏輯或 滿足 條件1 或者 條件2 一個爲真
- ! 邏輯非
判斷傳入參數個數是否 1 < n <= 3
if [ $# -gt 1 -a $# -le 3 ]
if [ $# -gt 1 ] && [ $# -le 3 ]
4.練習
test1:給定一個用戶
1.如果其UID爲0, 就顯示爲管理員
2.否則,顯示普通用戶
#!/bin/bash
#
NAME=user1
if id -u $NAME -eq 0;then
echo "admin"
else
echo "command"
fi
test2:判斷腳本是否有至少一個傳入參數
#!/bin/bash
#
if [ $# -lt 1 ]; then
echo "User: ./file.sh ARG1 [ARG2 ...]"
exit 7
else
echo $*
fi