测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值 。
格式1:test 条件表达式
格式2:[ 条件表达式 ]
[ 操作符 文件或目录 ]
常用操作符 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
-L | 测试是否为软连接文件 |
-nt | 判断文件A是否比文件B新 |
-ot | 判断文件A是否比文件B旧 |
-ef | 判断两个文件是否为同一文件 |
案例三:-f ; -r; -w; -x
案例四:&& echo
案例五:|| echo
案例六:比较两个文件
[ 整数1 操作数 整数2 ]
常用操作符 | 含义 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
案例一:查询当前目录下的文件数是否大于5,如果大于,则进行提示。
案例二:查询当前目录下的文件数是否小5,如果小于,则进行提示。
案例三:查看系统内存是否高于1024M,如果高于则提示。
[root@Kiro ~]# free -m
total used free shared buff/cache available
Mem: 4061 397 3233 14 430 3368
Swap: 3999 0 3999
[root@Kiro ~]# free -m|grep "Mem"
Mem: 4061 397 3233 14 430 3368
[root@Kiro ~]# free -m|grep "Mem"|awk '{print $4}'
3233
[root@Kiro ~]# free=`free -m|grep "Mem"|awk '{print $4}'`
[root@Kiro ~]# echo $free
3232
[root@Kiro ~]# test `echo $free` -gt 1024 && echo 系统内存超过1024
系统内存超过1024
格式:
[ 字符串1 = 字符串2 ] #判断是否相等
[ 字符串1 != 字符串2 ] #判断是否不等
[ -z 字符串 ] #判断字符串内容是否为空
常用操作符 | 说明 |
---|---|
= | 字符串内容相同 |
!= | 字符串内容不同,!号表示相反的意思 |
-z | 字符串内容为空 |
-n | 检查是否有字符串存在 |
格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2
常用操作符 | 说明 |
---|---|
-a或&& | 逻辑与,而且的意思 |
-o或▕▕ | 逻辑或,或者的意思 |
! | 逻辑否 |
格式:
if [ 条件判断式 ]; than
当条件判断成立时,执行一条或多条命令
fi
案例:使用单分支if语句判断test文件是否存在
案例二:
案例三:辨别shell脚本
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当条件判断不成立时,可以执行一条或多条命令
fi
[root@Kiro shell]# vim test.sh
#!/bin/bash
read -p "你今天开心吗?" ans
if [ $ans = "yes" ]
then
echo have a good time
else
echo 我的好心情分你一半
fi
案例:开启Apache 服务
[root@Kiro shell]# vim Apache.sh
#!/bin/bash
netstat -antup|grep ":80" &>/dev/null
if [ $? -eq 0 ];then
echo "Apache服务已运行!"
else
echo "Apache服务正在启动中..........."
yum install -y httpd &>/dev/null
systemctl start httpd
echo "启动完成,欢迎使用Apache服务"
fi
if [ 条件判断式 ]; then
当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
当条件判断成立时,可以执行一条或多条命令
else
当上面的条件判断都不成立时,可以执行一条或多条命令
fi
[root@Kiro shell]# vim test.sh
#!/bin/bash
read -p "你今天开心吗?" ans
if [ $ans = "yes" ]
then
echo have a good time
elif [ $ans = "no" ]
then
echo 我的快乐分你一半!
else
echo 你输入的$ans有误
fi
#脚本:判断文件类别
#!/bin/bash
read -p "输入:" name
if [ -d $name ] ; then
echo "$name 是一个目录"
elif [ -f $name ] ;then
echo "$name 是一个文件"
elif [ -b $name ];then
echo "$name 是一个设备文件 "
else
echo "无法判别文件类型"
fi
#!/bin/bash
read -p "请输入分数:" score
if [ $score -eq 100 ];then
echo "nice!"
elif [ $score -ge 90 ] && [ $score -lt 100 ];then
echo "$score 分,优秀!"
elif [ $score -ge 60 ] && [ $score -lt 90 ];then
echo "$score 分,继续加油!"
elif [ $score -le 60 ] ;then
echo "$score 分,有待努力!"
else
echo "你输入有误!"
fi
检测是否有httpd服务,没有的话下载并启动
#!/bin/bash
ps -aux | grep httpd |grep -v grep &>/dev/null
if [ $? -ne 0 ];then
if [[ "$(rpm -q httpd )"=="未安装软件包 httpd" ]];then
echo "正在启动Apache服务..." &>/dev/null
yum install -y httpd &>/dev/null
systemctl restart httpd
echo "Apache服务已经启动"
else
systemctl restart httpd
fi
else
echo "httpd is running"
fi
格式:
case 变量值 in
模式一)
命令序列
;;
模式二)
命令序列
;;
*)
默认命令序列
esac
案例一:局限于ok 回答
#!/bin/bash
read -p "请输入ok!" ans
case "$ans" in
[Oo][Kk])
echo 您输入的是$ans
esac
~
#!/bin/bash
read -p "请输入一个字符:" key
case $key in
[a-z][A-Z])
echo "你输入的字母是:$key"
;;
[0-9])
echo "你输入的数字是:$key"
;;
*)
echo "你输入的是其他:$key"
;;
esac
案例三:改变apache状态脚本
#!/bin/bash
case $1 in
start)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd start"
;;
stop)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd stop"
;;
restart)
/usr/bin/systemctl $1 httpd
/usr/bin/ps aux |grep httpd
echo "httpd stop"
;;
status)
/usr/bin/systemctl $1 httpd
;;
*)
echo "please input start|stop|restart|status"
esac
测试结果: