天天看點

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

文章目錄

  • 一、if語句
    • 1、單分支的if語句
    • 2、雙分支的if語句
    • 3、多分支的if語句
    • 4、練習題
  • 二、case語句
    • 1、語句結構
    • 2、執行個體

一、if語句

通過我上一篇文章條件測試操作,實際上使用“&&”和“||”邏輯測試已經可以完成簡單的判斷并執行相應的操作,但是當需要選擇執行的指令語句家偶偶是,這種方式将使執行代碼顯得很複雜,不好了解。而使用專門的if條件語句,可以更好的整理腳本結構,使得層次分明,清晰易懂

1、單分支的if語句

固定結構

if 條件測試操作
then 指令序列
fi
或者
if 條件測試操作;then
指令序列
fi
           

注意點

  • if和fi是必須成對出現,表示開始和結束
  • then如果連接配接if語句,需要“;”

    執行個體

    挂載到mnt目錄下,并把過程扔進垃圾箱

    Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
    或者then可以和if寫在一行,中間加上分号
    Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

2、雙分支的if語句

在單分支的基礎上針對“條件不成立”的情況下執行另一種操作,使用else

固定結構

if 條件測試操作
then 指令序列
else
fi
           

執行個體

判斷以.sh結尾的腳本是一個shell腳本

read -p "請輸入檔案名: " file
if [[ $file == *.sh ]];then
        echo "它是一個shell腳本"
else
        echo "它不是一個shell腳本"
fi
           
Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

3、多分支的if語句

固定結構

if 條件測試1
then 指令序列1
elif 條件測試操作2
then 指令序列2
else
指令序列3
fi
           

執行個體

判斷成績,85-100是優秀,70-85是良好,60-70及格,60以下不及格

#!/bin/bash
read -p "請輸入分數:" s
if [ $s -lt 0 -o $s -gt 100 ];then
        echo "超出範圍無法判定"
elif [ $s -ge 85 -a $s -le 100 ];then
        echo "優秀"
elif [ $s -ge 70 -a $s -lt 85 ];then
        echo "良好"
elif [ $s -ge 60 -a $s -lt 70 ];then
        echo "及格"
else
        echo “不及格”
fi
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
[ abc == abc ]   ##在一個方括号"[ ]“内,雙等号“==”是精确比對
[[ abc == abc* ]] ##雙括号可以使用&&和||做邏輯判斷;可以搭配通配符來判斷
           

執行個體

判斷系統使用者是否有家目錄,若無家目錄就删除使用者

read -p "請輸入使用者名:" user
if grep $user /etc/passwd &> /dev/null;then
        if [ -d /home/$user ];then
        echo "該使用者狀态正常"
        else
                read -p "該使用者沒有家目錄,是否删除該使用者,請輸入[yes/no]:" s
                        if [ $s == yes ];then
                        echo "正在删除使用者..."
                        userdel $user &> /dev/null;sleep 2
                        echo "該使用者已删除"
                        elif [ $s == no ];then
                        exit
                        fi
        fi
fi
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

4、練習題

  • 判斷目标主機是否存活,存活就列印is up,如果不存活就列印is down

vim ip.sh

#!/bin/bash
read -p "請輸入ip:" ip
ping -c 3 $ip &> /dev/null
if [ $? -eq 0 ];then
        echo "$ip is up"
else
        echo "$ip is down"
fi
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
  • 判斷目前登陸使用者是否是管理者

    vim user3.sh

#!/bin/bash
#判斷目前登入使用者是否是管理者
#!/bin/bash
read -p "請輸入使用者名:" user
id $user &> /dev/null
if [ $? -eq 0 ]
        then
                echo "是管理者"
else
                echo "不是管理者"
fi
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
  • 判斷輸入的使用者名是否存在,存在提示已存在,不存在則建立使用者并設定密碼

    vim user2.sh

#!/bin/bash
read -p "請輸入使用者名:" user
cat /etc/passwd | grep -q $user
if [ $? -eq 0 ]
        then
                echo "使用者已存在"
        else
read -p "請建立新的使用者名:" user
read -p "請輸入密碼:" pass
useradd $user
echo "$pass" | passwd --stdin $user
fi
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
  • 剪刀石頭布人機對戰

    vim r.sh

echo -e "\e[35m人機對戰開始\e[0m"
read -p "剪刀:0 石頭:1 步:2  請出拳(選擇數字0-2): " num
com=`expr $RANDOM % 3`
case $num in
[0])
        if [ $com -eq 0 ];then
                echo "平局"
                elif [  $com -eq 2 ];then
                        echo "你輸了"
                elif [  $com -eq 1 ];then
                        echo "你赢了"
        fi
;;
[1])
        if [ $com -eq 0 ];then
                echo "你赢了"
                elif [  $com -eq 2 ];then
                        echo "平局"
                elif [  $com -eq 1 ];then
                        echo "你輸了"

        fi
;;
[2])
        if [ $com -eq 0 ];then
                echo "你輸了"
                elif [  $com -eq 2 ];then
                        echo "你赢了"
                elif [  $com -eq 1 ];then
                        echo "平局"
        fi
;;
esac
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

二、case語句

1、語句結構

case 變量值 in
模式1)
指令序列1
;;
模式2)
指令序列2
;;
...
*)
預設指令序列
esac
           

使用case分支語句時,有以下注意點

  • case行尾必須為單詞“in”,每一模式必須以右括号“)”結束
  • 雙分号“;;”表示指令序列的結束
  • 模式字元串中,可以用方括号報送一個聯系的範圍,如[0-9];還可以用豎杠符号“|”表示或,如“A|B”
  • 最後的“)”表示預設模式,其中的相當于通配符
    Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

2、執行個體

  • 判斷一個字元是大小寫字母、數字、還是特殊字元

    vim zi.sh

#!/bin/bash
read -p "請輸入一個字元:" a
case $a in
[a-z])
echo "小寫字母";;
[A-Z])
echo "大寫字母";;
[0-9])
echo "數字";;
*)
echo "特殊字元";;
esac
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句

驗證時發現錯誤,字元集的問題導緻系統無法區分大小寫,把系統的變量LANG改成C語言

export LC_ALL=C
           

再次驗證正确

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句
  • 輸入一個月份,判斷是一年中的第幾季度

    vim yue.sh

#!/bin/bash
read -p "請輸入月份[數字1-12]:" m
case $m in
[1-3])
echo "第一季度";;
[4-6])
echo "第二季度";;
[7-9])
echo "第三季度";;
[10-12])
echo "第四季度";;
*)
echo "輸入錯誤";;
esac
           

驗證

Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句