一:条件测试操作
1:文件测试
[root@localhost ~]# [ -d /media/cdrom ] \\-d,测试目录是否存在
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /media/cdrom/Server ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -d /media/cdrom/server ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -d /media/cdrom/server ] && echo "yes" \\无输出表示不存在
[root@localhost ~]# [ -d /media/cdrom/Server ] && echo "yes"
yes
2:整数值比较
[root@localhost ~]# unum=`who | wc -l`
[root@localhost ~]# [ $unum -gt 5 ] && echo "Too many"
[root@localhost ~]# [ $unum -gt 0 ] && echo "Too many"
Too many
[root@localhost ~]# freecc=$(free -m | grep "Mem" | awk '{print $4+$6}') \\可用内存空间
[root@localhost ~]# [ $freecc -lt 2048 ] && echo ${freecc}MB \\小于某值后输出具体的值
1269MB
整数比较:
-eq:第一个数等于(Equal)第二个数。
-ne:第一个数不等于(Not Equal)第二个数。
-gt:第一个数大于(Greater Than)第二个数。
-lt:第一个数小于(Lesser Than)第二个数。
-le:第一个数小于或等于(Lesser or Equal)第二个数。
-ge:第一个数大于或等于(Greater or Equal)第二个数。
3:字符串比较
[root@localhost ~]# echo $LANG \\当前的语言环境
zh_CN.UTF-8
[root@localhost ~]# [ LANG != "en.US" ] && echo "not en.US" \\字符串比较测试 !=前后有空格
not en.US
[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?yes
[root@localhost ~]# [ $ACK = "yes" ] && echo "覆盖"
覆盖
[root@localhost ~]# read -p "是否覆盖现有文件(yes/no)?" ACK
是否覆盖现有文件(yes/no)?no
[root@localhost ~]# [ $ACK = "no" ] && echo "不覆盖"
不覆盖
4:逻辑测试
[root@localhost ~]# uname -r
2.6.32-431.el6.x86_64
[root@localhost ~]# Mnum=$(uname -r | awk -F. '{print $1}')
[root@localhost ~]# Snum=$(uname -r | awk -F. '{print $2}')
[root@localhost ~]# [ $Mnum -eq 2 ] && [ $Snum -gt 4 ] && echo "符合要求"
符合要求
二:使用if条件语句
1:单分支if语句
[root@localhost ~]# vim chkmountdir.sh \\如果挂在点不存在,自动创建
#!/bin/bash
MOUNT_DIR="/media/cdrom"
if [ ! -d $MOUNT_DIR ]
then
mkdir -p $MOUNT_DIR
fi
[root@localhost ~]# chmod +x chkmountdir.sh
[root@localhost ~]# ./chkmountdir.sh
[root@localhost ~]# vi /opt/chkifroot.sh \\判断是否是root,如果不是,没有权限操作
#!/bin/bash
if [ "$USER" != "root" ]
then
echo "cuowu,bushi root,quanxian bu zu"
exit 1
fi
fdisk -l /dev/sda
[root@localhost ~]# chmod +x /opt/chkifroot.sh
[root@localhost ~]# /opt/chkifroot.sh \\root可以执行
[aaa@localhost root]$ /opt/chkifroot.sh \\其他用户不可以执行
2:双分支if语句应用
[root@localhost ~]# vi pinghost.sh \\判断另一主机是否在线
#!/bin/bash
ping -c 3 -i 0.2 -W 3 $1 &> /dev/null
if [ $? -eq 0 ]
then
echo "Host $1 is up."
else
echo "Host $1 is down."
fi
[root@localhost ~]# chmod +x pinghost.sh
[root@localhost ~]# ./pinghost.sh 192.168.10.10
Host 192.168.10.10 is up.
[root@localhost ~]# ./pinghost.sh 192.168.10.1
Host 192.168.10.1 is down.
注释:
-c:ping的次数
-i:ping的间隔
-W:超时时间
[root@localhost ~]# vi chkftpd.sh \\检查vsftpd是否运行
#!/bin/bash
systemctl status vsftpd &>/dev/null
if [ $? -eq 0 ]
then
echo "监听地址:$(netstat -anpt | grep vsftpd | awk '{print $4}')"
echo "进程ID:$(pgrep -x vsftpd)"
else
echo "警告,vsftpd服务不可用"
fi
[root@localhost ~]# chmod +x chkftpd.sh
[root@localhost ~]# ./chkftpd.sh
警告:vsftpd服务不可用!
3:多分支if语句应用
[root@localhost ~]# vi gradediv.sh \\检查考试成绩是否合格
#!/bin/bash
read -p "请输入您的分数(0-100):" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE 分,优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE 分,合格"
else
echo "$GRADE 分,不合格"
fi
[root@localhost ~]# chmod +x gradediv.sh
[root@localhost ~]# ./gradediv.sh
请输入您的分数(0-100):67
67 分,不合格
[root@localhost ~]# ./gradediv.sh
请输入您的分数(0-100):78
78 分,合格
[root@localhost ~]# ./gradediv.sh
请输入您的分数(0-100):90
90 分,优秀
更多分支
[root@localhost ~]# vi gradediv.sh
#!/bin/bash
read -p "请输入你的成绩" GRADE
if [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]
then
echo "$GRADE分,成绩优秀"
elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]
then
echo "$GRADE分,合格"
elif [ $GRADE -ge 0 ]&& [ $GRADE -le 69 ]
then
echo "不及格"
else
echo "输入错误"
fi
三、使用case分支语句
1:编写检查用户输入的字符类型的脚本
[root@localhost ~]# vim hitkey.sh
#!/bin/bash
read -p "请输入一个字符,并按Enter键确认:" KEY
case "$KEY" in
[a-z]|[A-Z])
echo "您输入的是 字母."
;;
[0-9])
echo "您输入的是 数字."
;;
*)
echo "您输入的是 空格、功能键或者其他控制字符."
esac
[root@localhost ~]# chmod a+x hitkey.sh
测试并确认执行结果
[root@localhost ~]#./hitkey.sh
请输入一个字符,并按Enter键:k
您输入的是 字母 k.
......
2:编写系统服务脚本
[root@localhost ~]# vim myprog
#!/bin/bash
case "$1" in
start)
echo -n "正在启动sleep服务..."
if sleep 7200 &
then
echo "ok"
fi
;;
stop)
echo -n "正在停止sleep服务..."
pkill "sleep" &> /dev/null
echo "ok"
;;
status)
if pgrep "sleep" &> /dev/null ; then
echo "sleep服务已经启动."
else
echo "sleep服务已经停止."
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法:$0 {start|stop|status|restart}"
esac
[root@localhost ~]# chmod a+x myprog
测试并确认执行结果
[root@localhost ~]#./myprog start
正在启动sleep服务...ok
[root@localhost ~]#./myprog status
sleep服务已经启动。
[root@localhost ~]#./myprog stop
正在停止服务sleep服务...ok
[root@localhost ~]#./myprog reload
用法:./myprog {start|stop|status|restart}
将myprog脚本添加为标准的系统服务
[root@localhost ~]# vim myprog
#!/bin/bash
# chkconfig: - 90 10
# description: Startup script for sleep Server
case "$1" in
start)
echo -n "正在启动sleep服务..."
if sleep 7200 &
then
echo "ok"
fi
;;
stop)
echo -n "正在停止sleep服务..."
pkill "sleep" &> /dev/null
echo "ok"
;;
status)
if pgrep "sleep" &> /dev/null ; then
echo "sleep服务已经启动."
else
echo "sleep服务已经停止."
fi
;;
restart)
$0 stop
$0 start
;;
*)
echo "用法:$0 {start|stop|status|restart}"
esac
[root@localhost ~]# cp myprog /etc/init.d/
[root@localhost ~]# chkconfig --add myprog
[root@localhost ~]# chkconfig --list myprog
[root@localhost ~]# service myprog start
备注:
# chkconfig: - 90 10
90是启动优先级,10是停止优先级,优先级范围是0-100,数字越大,优先级越低。
标签:语句,Shell,GRADE,编程,echo,sh,sleep,root,localhost From: https://blog.csdn.net/weixin_71499831/article/details/139234491