文章目錄
- 一、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目錄下,并把過程扔進垃圾箱
或者then可以和if寫在一行,中間加上分号Shell程式設計之條件語句(三)——if語句、case語句一、if語句二、case語句 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
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
驗證
[ 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
驗證
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
驗證
-
判斷目前登陸使用者是否是管理者
vim user3.sh
#!/bin/bash
#判斷目前登入使用者是否是管理者
#!/bin/bash
read -p "請輸入使用者名:" user
id $user &> /dev/null
if [ $? -eq 0 ]
then
echo "是管理者"
else
echo "不是管理者"
fi
驗證
-
判斷輸入的使用者名是否存在,存在提示已存在,不存在則建立使用者并設定密碼
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
驗證
-
剪刀石頭布人機對戰
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
驗證
二、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
驗證
驗證時發現錯誤,字元集的問題導緻系統無法區分大小寫,把系統的變量LANG改成C語言
export LC_ALL=C
再次驗證正确
-
輸入一個月份,判斷是一年中的第幾季度
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
驗證