shell腳本編程之分支

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

    

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章