文章目录
- 逻辑控制---条件判断
-
- 一、条件判断的实现
- 二、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)、数字表达式脚本示例
- 自动挂载光盘
#!/bin/bash
#
mount -a &> /dev/null
if df -Th | grep "iso9660" &> /etc/null ; then
mount_dir=$(df -Th | grep "iso9660" | awk '{print $7}')
echo "光盘已挂载到$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 "已成功挂载光盘$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