linux shell中的条件判断
- bash [] 符号
- []俩个符号左右都要有空格分隔
- 内部操作符与操作变量之间要有空格:例如
[ "a" = "b" ]
- 字符串比较中, <>需要写成< >进行转义
- []中字符串或者${}变量尽量使用“”双引号扩住,避免值未定义引用而出错的好办法
- []中可以使用-a -o进行逻辑运算
- []是bash内置命令
- 测试时逻辑操作符
符号 | 说明 |
---|---|
-a | 逻辑与,操作符俩边都为真,结果为真,否则为假 |
-o | 逻辑或,操作符俩边一边为真,结果为真,否则为假 |
! | 逻辑否,条件为假,结果为真 |
例子如下,注意shell代码中的空格
read -p "please input (y/n):"yn
[ "${yn}" == "n" -o "${yn}" == "N"] && echo "OK,continue" && exit 0
[ "${yn}" == "y" -o "${yn}" == "Y"] && echo "Oh,interrupt" && exit 0
echo "I don't know what choice is" && exit 0
- shell script的预设参数(1...)
[dmtsai@study ~]$ file /etc/init.d/network
/etc/init.d/network: Bourne-Again shell script, ASCII text executable
# 使用 file 來查詢後,系統告知這個檔案是個 bash 的可執行 script 喔!
[dmtsai@study ~]$ /etc/init.d/network restart
/path/to/scriptname opt1 opt2 opt3 opt4
$0 $1 $2 $3 $4
[图片上传失败...(image-c35c76-1559204214548)]
[图片上传失败...(image-5529d-1559204214549)]
- shift:参数变量偏移
#!/bin/bash
# Program:
# Program shows the effect of shift function.
# History:
# 2009/02/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift # 進行第一次『一個變數的 shift 』
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
shift 3 # 進行第二次『三個變數的 shift 』
echo "Total parameter number is ==> $#"
echo "Your whole parameter is ==> '$@'"
执行结果
Total parameter number is ==> 6 <==最原始的參數變數情況
Your whole parameter is ==> 'one two three four five six'
Total parameter number is ==> 5 <==第一次偏移,看底下發現第一個 one 不見了
Your whole parameter is ==> 'two three four five six'
Total parameter number is ==> 2 <==第二次偏移掉三個,two three four 不見了
Your whole parameter is ==> 'five six'
- 利用if ... then
if [ "${yn}" == "Y" ] || [ "${yn}" == "y" ]; then
echo "OK, continue"
exit 0
fi
if [ "${yn}" == "N" ] || [ "${yn}" == "n" ]; then
echo "Oh, interrupt!"
exit 0
fi
echo "I don't know what your choice is" && exit 0
多重/复杂条件判断
# 一個條件判斷,分成功進行與失敗進行 (else)
if [ 條件判斷式 ]; then
當條件判斷式成立時,可以進行的指令工作內容;
else
當條件判斷式不成立時,可以進行的指令工作內容;
fi
# 多個條件判斷 (if ... elif ... elif ... else) 分多種不同情況執行
if [ 條件判斷式一 ]; then
當條件判斷式一成立時,可以進行的指令工作內容;
elif [ 條件判斷式二 ]; then
當條件判斷式二成立時,可以進行的指令工作內容;
else
當條件判斷式一與二均不成立時,可以進行的指令工作內容;
fi
注意if和[一定要有个空格
- case ..... esac 判断
function printit(){
echo "Your choice is ${1}" # 這個 $1 必須要參考底下指令的下達
}
echo "This program will print your selection !"
case ${1} in
"one")
printit 1 # 請注意, printit 指令後面還有接參數!
;;
"two")
printit 2
;;
"three")
printit 3
;;
*)
echo "Usage ${0} {one|two|three}"
;;
esac
- loop
while [ condition ] <==中括號內的狀態就是判斷式
do <==do 是迴圈的開始!
程式段落
done <==done 是迴圈的結束
until [ condition ]
do
程式段落
done
for var in con1 con2 con3 ...
do
程式段
done
- shell script的追踪和debug
sh [-nvx] scripts.sh
選項與參數:
-n :不要執行 script,僅查詢語法的問題;
-v :再執行 sccript 前,先將 scripts 的內容輸出到螢幕上;
-x :將使用到的 script 內容顯示到螢幕上,這是很有用的參數!