文章目錄
- 邏輯控制---條件判斷
-
- 一、條件判斷的實作
- 二、if的簡單結構
-
- 1、條件的寫法
-
- 1)、數字表達式
- 2)、字元表達式
- 3)檔案目錄表達式
- 2、單分支if
- 3、多分支if
-
- 1)、多條件的寫法
- 4、嵌套if
- 5、case條件判斷
-
- 1)、位置變量
邏輯控制—條件判斷
一、條件判斷的實作
- if
- case
二、if的簡單結構
if 條件 ; then
執行的操作
執行的操作
fi
1、條件的寫法
- shell 指令
- 判斷指令的執行狀态碼
- [ 表達式 ]
- 數字表達式
- 字元表達式
- 檔案目錄表達式
1)、數字表達式
- [ 數字 -eq 數字 ] 等于
- [ 數字 -ne 數字 ] 不等于
- [ 數字 -gt 數字 ] 大于
- [ 數字 -ge 數字 ] 大于等于
- [ 數字 -lt 數字 ] 小于
- [ 數字 -le 數字 ] 小于等于
(1)、數字表達式腳本示例
- 自動挂載CD光牒
#!/bin/bash
#
mount -a &> /dev/null
if df -Th | grep "iso9660" &> /etc/null ; then
mount_dir=$(df -Th | grep "iso9660" | awk '{print $7}')
echo "CD光牒已挂載到$mount_dir"
else
sed -ri '$a \/dev/sr0 /mnt/ iso9660 defaults 0 0' /etc/fstab
mount -a &> /dev/null
mount_name=$(df -Th | grep "iso9660" | awk '{print $1}')
echo "已成功挂載CD光牒$mount_name"
fi
- 自動建立使用者
#!/bin/bash/
#
read -p "請輸入使用者名:" user
read -p "請輸入密碼" passwd
grep "^$user:" /etc/passwd &> /etc/null
if [ $? -ne 0 ]; then
useradd $user
echo $passwd | passwd --stdin $user &> /etc/null
echo "$user使用者建立成功"
else
echo "$user已存在"
fi
- 判斷使用者UID與組ID是否一緻
#!/bin/bash/
#
read -p "請輸入使用者名:" user
grep "^$user:" /etc/passwd &> /etc/null
id_num=$(id $user -u)
grp_num=$(id $user -g)
if [ $id_num -eq $grp_num ]; then
echo "Good,使用者ID與組ID一緻!"
else
echo "No,使用者ID與組ID不一緻!"
fi
- 擷取磁盤使用率超過則報警
#!/bin/bash
#
usage=$(df -Th | grep "/$" | awk '{print $6}' | awk -F% '{print $1}')
if [ $usage -ge 60 ]; then
echo "警告!警告!目前目錄使用率為:${usage}% ,目錄磁盤使用率超過60%!!!"
else
echo "目前目錄使用率為:${usage}%, 根目錄使用率未超過60%"
fi
2)、字元表達式
- == 兩個字元相等
- != 不等
- [ -z 字元 ] 判斷字元是否為空字元
- 在shell腳本中空格也是代表某一個字元,如果想在if語句條件判斷中加入空格,需要将 “條件判斷” 加雙引号
(1)字元表達式腳本示例
#!/bin/bash
#
read -p "請輸入密碼:" pwd1
read -p "确認密碼:" pwd2
if [ "$pwd1" == "$pwd2" ]; then
echo "密碼修改成功!"
else
echo "密碼不一緻!"
fi
3)檔案目錄表達式
- [ -e 檔案目錄名稱 ] 判斷檔案目錄是否存在
- [ -f 檔案名稱 ] 判斷文本檔案
- [ -d 檔案名稱 ] 判斷是否為目錄
- [ -b 檔案名稱 ] 判斷是否為塊裝置檔案
- [ -l 檔案名稱 ]
- [ -s 檔案名稱 ]
- [ -r 檔案名稱 ] [ -w 檔案名稱 ] [ -x 檔案名稱 ]
所有單目表達式支援使用!取反 [ ! -e /opt/file01 ]
2、單分支if
if 條件; then
執行的操作
執行的操作
else
執行的操作
執行的操作
fi
3、多分支if
if 條件1; then
執行的操作
執行的操作
elif 條件2; then
執行的操作
執行的操作
elif 條件3; then
執行的操作
執行的操作
else
執行的操作
執行的操作
fi
1)、多條件的寫法
- 注意多條件隻要有一個符合條件就會退出
- and 并且
-
- [ 條件1 -a 條件2 ]
- [ 條件1 ] && [ 條件2 ]
- or 或者
-
- [ 條件1 -o 條件2 ]
- [ 條件1 ] || [ 條件2 ]
(1)多條件腳本示例
-
判斷使用者輸入
Linux, linux 顯示redhat
windows, Windows, 顯示Microsoft
mac, MAC, 顯示apple
顯示其他
#!/bin/bash
#
echo "----選擇下列的系統----"
echo "Linux、linux"
echo "windows、Windows"
echo "mac、MAC"
echo "----------------------"
read -p "請輸入系統:" system
if [ $system == linux -o $system == Linux ]; then
echo
echo "該系統為:RedHat System"
elif [ $system == windows -o $system == Windows ]; then
echo
echo "該系統為:Microsoft System"
elif [ $system == mac -o $system == MAC ]; then
echo
echo "該系統為:Apple System"
else
echo "其他作業系統"
4、嵌套if
- 适用于多層判斷
if 條件; then
if 條件; then
執行的操作
執行的操作
else
執行的操作
執行的操作
fi
else
執行的操作
執行的操作
fiw
1)嵌套腳本示例
- 删除檔案的空行和注釋行
#!/bin/bash
#
read -p "請輸入要過濾的源檔案:" file_name
if [ -e $file_name ]; then
if grep "^$" $file_name &> /dev/null; then
Hnumber=$(grep -n "^$" $file_name)
echo "空行的行号為:"
echo $Hnumber
sed -i -e '/^$/d' -e '/^#/d' $file_name
echo "删除空行後的檔案為:"
echo
cat $file_name
fi
else
echo "源檔案不存在!"
fi
5、case條件判斷
- 适用于判斷某個變量有多種固定的取值時
case 變量 in
值1)
執行的操作
執行的操作
;;
值2)
執行的操作
執行的操作
;;
值3)
執行的操作
執行的操作
;;
*)
執行的操作
執行的操作
;;
esac
1)、位置變量
- $1 $2 $3 $4…$9 ${10}
- $1 指令第一個參數,$2第二個參數
- $0 指令自身
- $#
- 參數的個數
- case腳本示例
#!/bin/bash
#
if [ $# -eq 0 ]; then
echo "指令輸入錯誤,幫助資訊: $0 <linux|Linux|windows|Windows|mac|MAC>"
exit 78
fi
case $1 in
linux|Linux)
echo "RedHat"
;;
windows|Windows)
echo "Microsoft"
;;
mac|MAC)
echo "Apple"
;;
*)
echo "Others"
;;
esac
- 位置變量腳本示例
1 #!/bin/bash
2 #
3
4 nginx_file=/usr/local/nginx/sbin/nginx
5 nginx_pid=/usr/local/nginx/logs/nginx.pid
6
7 if [ -z $1 ]; then
9 exit 100
10 fi
11
12 case $1 in
13 start)
14 if [ -e $nginx_pid ]; then
15 echo "Nginx 正在運作"
16 else
17 $nginx_file
18 if [ $? -eq 0 ]; then
19 echo "Nginx 啟動成功"
20 else
21 echo "Nginx 啟動失敗"
22 fi
23 fi
24 ;;
25 stop)
26 if [ -e $nginx_pid ]; then
27 $nginx_file -s stop
28 if [ $? -eq 0 ]; then
29 echo "Nginx 成功停止"
30 else
31 echo "Nginx 停止失敗"
32 fi
33 else
34 echo "Nginx 未在運作"
35 fi
36 ;;
37 reload)
38 kill -1 $(cat $nginx_pid)
39 if [ $? -eq 0 ]; then
40 echo "Nginx 成功重新加載"
41 else
42 echo "重新加載失敗"
43 fi
44 ;;
45 restart)
46 if [ -e $nginx_pid ]; then
47 $nginx_file -s stop
48 if [ $? -eq 0 ]; then
49 echo "Nginx 正在重新啟動"
50 else
51 echo "Nginx 啟動失敗!!"
52 fi
53 sleep 1
54 $nginx_file
55 if [ $? -eq 0 ]; then
56 echo "Nginx 重新啟動成功"
57 else
58 echo "Nginx 重新啟動失敗"
59 fi
62 $nginx_file -s stop
63 if [ $? -eq 0 ]; then
64 echo "Nginx 正在重新啟動"
65 else
66 echo "Nginx 啟動失敗!!"
67 fi
68 sleep 1
69 $nginx_file
70 if [ $? -eq 0 ]; then
71 echo "Nginx 重新啟動成功"
72 else
73 echo "Nginx 重新啟動失敗"
74 fi
75 fi
76 ;;
77 status)
78 if [ -e $nginx_pid ]; then
79 echo "Nginx PID's $(cat $nginx_pid) 正在運作"
80 else
81 echo "Nginx 已經停止"
82 fi
83 ;;
84 start_auto)
85 chmod a+x /etc/rc.d/rc.local
87 if [ $? -eq 0 ]; then
88 echo "正在寫入開機自啟配置檔案中......"
89 source /etc/rc.d/rc.local
90 if [ $? -eq 0 ]; then
91 echo "Nginx 成功開機自啟!"
92 fi
93 else
94 echo "寫入開機自動配置檔案失敗!!!"
95 fi
96 ;;
97 Cancel_startup)
98 if grep "nginx" /etc/rc.d/rc.local &> /dev/null; then
99 echo "正在取消開機自啟"
100 sed -ri '/nginx/d' /etc/rc.d/rc.local
101 if [ $? -eq 0 ]; then
102 echo "成功取消開機自啟"
103 else
104 echo "取消開機自啟失敗!!!"
105 fi
106 else
107 echo "Nginx 目前開機不自啟"
108 fi
109 ;;
110 *)
111 echo "幫助:$0 <status|start|stop|reload|restart>"
112 exit 101
113 ;;
114 esac