Linux Shell脚本 条件测试 及 if的几种分支 case

条件测试

  • 当需要对执行的某一条命令执行的结果状态进行判断的时候,需要进行条件测试。
  • 使用test 条件表达式 或者 [ 条件表达式 ]
  • 两层方括号表示模式匹配,可以用通配符
    • 示例:[[ aa.sh == *.sh ]] && echo y || echo n
  • 文件测试
    • 对文件测试意思是,根据给的文件的路径(绝对路径或相对路径),判断对应的是文件还是目录,或者是文件或目录的读写执行权限。
    • -d 表示测试是否是目录(Directory)
    • -f 表示测试是否为文件(file)
    • -e 表示测试目录或文件是否存在(exist)
    • -r 表示测试当前用户是否有权限读(read)
    • -w 表示测试当前用户是否有权写入(write)
    • -x 表示测试是否可执行(execute)
  • 整数值比较
    • -eq :等于
    • -ne :不等于
    • -gt :大于
    • -lt :小于
    • ge :大于等于
    • le :小于等于
  • 字符串比较
    • = :字符串1与字符串2相同
    • != :字符串1与字符串2不相同
    • -z :检查字符串是否为空,对于未定义或赋予空值的变量将视为空串。
    • -n :检查字符串是否非空,变量赋予值为非空。
  • 逻辑测试
    • && :逻辑与,表示“并且”,当前后两个测试语句都成立时,整个测试命令的返回值为0。可以用 -a
      • 示例 [ 测试语句1 -a 测试语句2 ] 也可以用 [ 测试语句1 ] && [ 测试语句2 ]
    • || :逻辑或,表示“或者”,前后两个测试语句只需要满足一个成立,返回值为0。
      • 示例 [ 测试语句1 -o 测试语句2 ] 也可以用 [ 测试语句1 ] || [ 测试语句2 ]
    • ! :逻辑非,表示“不”,当测试语句不成立时,返回值为0。

if语句

if语句的结构

1、单分支if
在这里插入图片描述
语法格式如下:
if 测试语句
    then
        命令序列
fi


2、双分支if
在这里插入图片描述
语法格式如下:
if 测试语句
then
        命令序列1
else
        命令序列2
fi


3、多分支if
在这里插入图片描述
语法格式如下
if 测试语句1
then
        命令序列1
elif 测试语句2
then
        命令序列2
.
. //省略部分elif
.
else
        命令序列n…
fi


if分支的简单应用

[root@localhost ~]# vim hashome.sh 

#!/bin/bash
#判断用户有无家目录的脚本
#作者:lvbin

read -p "请输入用户名:" name
cat /etc/passwd | grep ^$name
if [ $? -eq 0 ];then
        if [ $name == root ];then
                echo "该用户是管理员用户,家目录是$HOME"
        else
                ls /home | grep $name
                if [ $? -eq 0 ];then
                        echo "该$name用户家目录是/home/$name"
                fi
        fi
else
        echo "没有此用户"
fi

在这里插入图片描述

case 分支

case分支介绍

case分支适用于当某个变量存在多种取值,需要对其中的每一种取值执行不同的命令序列。
case语法结构如下:
case 变量值 in
模式1)
        命令序列1
;;
模式2)
        命令序列2
;;
......
*)
        默认命令序列
esac

case语句的执行流程

        首先使用变量值与模式1比较,若比较值相同,则执行模式1下面的命令序列1,直到遇见 “ ;; ” 后跳转到esac,表示分支结束。若与模式1不匹配,则往下匹配模式2,如相同,则执行模式2的命令序列2,直到遇见 “ ;; ” 后跳转到esac,表示分支结束,依次类推,如果都不匹配,则执行默认的 *)下面的默认命令序列。
注意事项:
        1、case行尾必须为单词 in,每一个模式必须以右括号 “ ) ”结尾。
2、双分号“ ;; ”表示命令序列结束。
3、模式字符串种,可以用方括号表示一个连续的方位,例如“[0-9]”,还可以用竖杠 “|”表示或,例如“a|b”。
4、最后的 *)表示默认模式,其中*相当于通配符。

case的简单应用

[root@localhost ~]# vim caiquan.sh 

#!/bin/bash
#猜拳小游戏
#作者:lvbin
echo "人机猜拳小游戏"
read -p "请输入剪刀、石头或布:" chose
#随机数模3取余,0代表剪刀、1代表石头、2代表布
computer=$[RANDOM%3]
case $chose in
"剪刀")
        if [ $computer -eq 0 ];then
                echo "电脑出剪刀,平局"
        elif [ $computer -eq 1 ];then
                echo "电脑出石头,你输了"
        else
                echo "电脑出布,你赢了"
        fi
;;
"石头")
        if [ $computer -eq 0 ];then
                echo "电脑出剪刀,你赢了"
        elif [ $computer -eq 1 ];then
                echo "电脑出石头,平局"
        else
                echo "电脑出布,你输了" 
        fi
;;
"布")
        if [ $computer -eq 0 ];then
                echo "电脑出剪刀,你输了"
        elif [ $computer -eq 1 ];then
                echo "电脑出石头,你赢了"
        else
                echo "电脑出布,平局"
        fi
;;
esac

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值