Shell脚本条件测试if语句case语句!
Posted handsomeboy-东
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell脚本条件测试if语句case语句!相关的知识,希望对你有一定的参考价值。
一、条件测试
- 条件测试方式:
test 条件表达式
[ 条件表达式 ]
[root@localhost ~]# test a == b //测试a是否等于b
[root@localhost ~]# echo $? //查看上条命令结果,非0表示错误,即a不等于b
1
[root@localhost ~]# test a != b
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ a == b ] && echo "yes" || echo "no" //判断a是否等于b,是则输出yes,不是则输出no,
no
1.1文件测试
[ 操作符 文件或目录 ]
文件测试是指根据指定的路径名称,判断对应的是文件还是目录,或者判断文件是否存在,是否有可读、可写、可执行等权限(root用户权限太大,默认三个权限一直都有)
-d :测试是否为目录
-e :测试目录或文件是否存在
-f :测试是否为文件
-b :测试是否为设备文件
-l :测试是否为链接文件
-c :测试是否为字符设备文件
-r :测试当前用户是否有可读权限
-w :测试当前用户是否有可写权限
-x :测试当前用户是否有可执行权限
-s :测试存在且文件大小为空
[root@localhost ww]# mkdir yy
[root@localhost ww]# touch zz
[root@localhost ww]# ls
yy zz
[root@localhost ww]# [ -d zz ] && echo y || echo n
n
[root@localhost ww]# [ -d yy ] && echo y || echo n
y
[root@localhost ww]# [ -f zz ] && echo y || echo n
y
1.2整数值比较
根据给定的两个整数值,判断两个数值的关系,可以用来判断以登录用户数量、开启进程数、磁盘使用率是否超标,已经软件版本号是否符合要求等
判断操作选项:
-eq :(equal)等一个数等二个数
-ne :(not equal)第一个数不等于第二个数
-gt :(greater than)第一个数大于第二个数
-lt :(lesser than)第一个数小于第二个数
-ge :(greater or equal)第一个数大于等于第二个数
-le :(lesser or equal)第一个数小于等于第二个数
[root@localhost ~]# [ 1 -eq 3 ] && echo "对头" || echo "不对"
不对
#### &&表示且,||表示或,这里表示前面的判断为正确即执行&&后面内容,判断为错误即执行||后面的内容
[root@localhost ~]# [ 1 -gt 3 -a 1 -lt 3 ] && echo y || echo n
n
#### -a表示and,“和”的意思,只有两个条件都判断为正确才为真,-o表示或者,只有两个条件都判断错误才为假
#### [ 1 -gt 3 -a 1 -lt 3 ]也可以写成[ 1 -gt 3 && 1 -lt 3 ]或[ 1 -gt 3 ] && [ 1 -lt 3 ]
1.3字符串测试
[ 字符串1 = 字符串 ] :判断两字符串是否相等
[ -z 字符串 ] :判断字符串是否为空,
[ -n 字符串 ] :判断字符串是否为非空,
[root@localhost ww]# [ -z $a ] && echo y || echo n
y
[root@localhost ww]# a=5
[root@localhost ww]# [ -z $a ] && echo y || echo n
n
[root@localhost ww]# [ -n $a ] && echo y || echo n
y
二、if语句
- if语句结构
单分支结构:
if 条件测试
then 命令序列
fi
#!/bin/bash
if [ 1 -eq 1 ];then
echo "正确"
fi
双分支结构
if 条件测试
then 命令序列
else 命令序列
fi
#!/bin/bash
if [ 1 -eq 1 ];then
echo "正确"
else
echo "错误"
fi
多分支结构
if 条件测试
then 命令序列
elif 条件测试
then 命令序列
else
命令序列
fi
2.1if语句脚本案例
[root@localhost ~]# vim ping.sh
#!/bin/bash
#判断目标主机是否存活
read -p "请输入目标主机IP:" IP
ping -c 3 $IP &> /dev/null
if [ $? -eq 0 ]
then
echo "is up"
else
echo "is down"
fi
[root@localhost ~]# ./user.sh
请输入目标主机IP:192.168.43.12
is down
[root@localhost ~]# vim user1.sh
#!/bin/bash
#判断用户是否存在,不存在则创建用户并设置密码,存在则输出已存在
read -p "请输入用户名:" user
id -u $user &> /dev/null
if [ $? -eq 0 ];then
echo "已存在"
else
useradd $user
read -p "请输入密码:" pass
echo "$pass" | passwd --stdin $user &> /dev/null
fi
[root@localhost ~]# ./user1.sh
请输入用户名:qiqi
请输入密码:123
三、case语句
case语句主要应用于某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列,case语句值判断一个变量的不同取值
case 变量值 in
模式)
命令序列
;;
模式)
;;
*)
默认命令序列
esac
[root@localhost ~]# vim yf.sh
#!/bin/bash
#判断输入月份是哪个月份
read -p "请用中文输入月份,如:三月 :" yf
case $yf in
一月|二月|三月)
echo "第一季度";;
四月|五月|六月)
echo "第二季度";;
七月|八月|九月)
echo "第三季度";;
十月|十一月|十二月)
echo "第四季度";;
esac
[root@localhost ~]# bash ./yf.sh
请用中文输入月份,如:三月 :四月
第二季度
四、shell脚本案例
系统服务简单控制脚本
[root@localhost ww]# vim httpd.sh
#!/bin/bash
case "$1" in
start)
systemctl start httpd
echo "正在启动服务";;
status)
echo "查看服务状态"
systemctl status httpd;;
stop)
echo "正在停止服务"
systemctl stop httpd;;
restart)
echo "正在重启服务"
systemctl restart httpd;;
*)
echo "用法 :$0 {start|stop|status|restart}"
esac
[root@localhost ww]# ./httpd.sh start
正在启动服务
[root@localhost ww]# ./httpd.sh stop
正在停止服务
猜拳游戏
[root@localhost ~]# vim y.sh
#!/bin/bash
#猜拳人机大战
#作者:whd
echo "请根据下列提示选择您的出拳手势"
echo "0.石头"
echo "1.剪刀"
echo "2.布"
read -p "请输入0-2: " person
pc=`expr $RANDOM % 3`
if [ "$person" == "$pc" ];then
echo "平局"
else
case $person in
0)
if [ $pc == 2 ];then
echo "你赢了"
else
echo "你输了"
fi
;;
1)
if [ $pc == 0 ];then
echo "你赢了"
else
echo "你输了"
fi
;;
2)
if [ $pc == 1 ];then
echo "你赢了"
else
echo "你输了"
fi
;;
*)
echo "请按出拳手势出拳"
;;
esac
fi
[root@localhost ~]# bash ./y.sh
[root@localhost ~]# bash ./y.sh
请根据下列提示选择您的出拳手势
0.石头
1.剪刀
2.布
请输入0-2: 2
平局
[root@localhost ~]# bash ./y.sh
请根据下列提示选择您的出拳手势
0.石头
1.剪刀
2.布
请输入0-2: 2
你输了
[root@localhost ~]# bash ./y.sh
请根据下列提示选择您的出拳手势
0.石头
1.剪刀
2.布
请输入0-2: 5
请按出拳手势出拳
以上是关于Shell脚本条件测试if语句case语句!的主要内容,如果未能解决你的问题,请参考以下文章