Shell脚本条件测试、if语句、case语句!

条件测试和if语句

  • 一、条件测试
      • 1.1文件测试
      • 1.2整数值比较
      • 1.3字符串测试
  • 二、if语句
      • 2.1if语句脚本案例
  • 三、case语句
  • 四、shell脚本案例
      • 系统服务简单控制脚本
      • 猜拳游戏

一、条件测试

  • 条件测试方式:
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

Shell脚本条件测试、if语句、case语句!_第1张图片

#!/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

Shell脚本条件测试、if语句、case语句!_第2张图片

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
请按出拳手势出拳

你可能感兴趣的:(linux,shell)