Linux shell

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
Linux shell_第1张图片
image.png

注意if和[一定要有个空格

Linux shell_第2张图片
image.png
  • 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 內容顯示到螢幕上,這是很有用的參數!

你可能感兴趣的:(Linux shell)