二、shell 脚本条件测试

一、条件测试

shell 进行条件判断的两种方式

test

格式

test [操作符选项] 表达式

[ 操作符选项 表达式 ]  两边要有空格

测试特定的表达式是否成立,当条件成立,测试语句的返回值为0,否则为其他数值

boole true(真) false(假)
返回码 0 非0 linux系统 shell脚本
1 0 java C语言

文件测试

文件测试常见选项

常见的测试操作符 含义
-e 测试 指定的文件或者目录是否存在
-f 测试 指定的对象是否为文件;指定的文件是否存在
-d 测试 指定的对象是否为目录;指定的目录是否存在
-r 测试 当前用户是否有读权限
-w 测试 当前用户是否有写权限
-x 测试 当前用户是否有执行权限
-L 测试文件是否为符号链接(软链接文件)
[root@localhost ~]# test -d /root/;echo $?#测试是否为目录
0 #返回值0,表示存在

[ -f /opt/abc.txt ]

整数值比较

格式
[ 整数1 操作符 整数2 ]

常见测试操作符:

操作符 含义
-eq 等于 ==
-gt 大于 />
-lt 小于 /<
-ge 大于等于
-le 小于等于
-ne 不等于 !=

实例

[root@localhost ww]# [ 10 -gt 20 ]
[root@localhost ww]# echo $?
1
[root@localhost ww]# a=10
[root@localhost ww]# b=20
[root@localhost ww]# [ $a -lt $b ]
[root@localhost ww]# echo $?
0

字符串比较

格式
[ 字符串1 = 字符串2 ]  或者  [ "字符串1" == "字符串2" ]#判断是否相等
[ "字符串1" != "字符串2" ]                          #判断是否不等
[ -z "字符串" ]    -z:#判断字符串是否为空,或者 指定的变量是否为空值
[ -n "字符串" ]    -n:#检查是否有字符串存在

实例

[root@localhost ww]# ww=ky18
[root@localhost ww]# [ -z $ww ]
[root@localhost ww]# echo $?
1
[root@localhost ww]# echo $name

[root@localhost ww]# echo $?
0
[root@localhost ww]# [ -n "$name" ]
[root@localhost ww]# echo $?
1
#字符串判断记得加""

浮点数的运算

(有小数点的运算)
echo "浮点运算字符串" | bc

[root@localhost ww]# echo "2.2+3.4" | bc
5.6

awk 'BEGIN {print 浮点运算字符串}'

逻辑测试

格式:
[ 表达式1 ] 操作符 [ 表达式2 ]
命令1 操作符 命令2

[ 表达式1 ] && [ 表达式2 ]     等同于   [ 表达式1 -a 表达式2 ]    [[ 表达式1 && 表达式2 ]] 
[ 表达式1 ] || [ 表达式2 ]     等同于   [ 表达式1 -o 表达式2 ]    [[ 表达式1 || 表达式2 ]] 

操作符:

-a && 且 前后条件都要成立,逻辑与,而且的意思
o或▕▕ 只需前后条件中一个成立
逻辑否

二、if语句

1单分支

格式:
if [ 条件判断式 ]; than
	当条件判断成立时,执行一条或多条命令
fi 					

如果只有一个判断式要进行,那么我们可以使用单分支的if语句 ,只有在条件成立时才会执行,否则不执行任何操作

2双分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当条件判断不成立时,可以执行一条或多条命令
fi 		

在同一个数据的判断中,如果该数据需要进行两种不同的判断,就需要双分支if语句

判断用户输入的是否为yes :

[root@localhost ~]#vim reboot.sh 
 
#/bin/bash
read -p "请输入yes确定重启:" TEST
if [ $TEST = "yes" ]
   then
       echo 系统即将重启
else
   echo 没有输入yes,系统将不重启
fi

3多分支结构

if [ 条件判断式 ]; then
	当条件判断成立时,可以执行一条或多条命令
elif [ 条件判断式二 ]; then
	当条件判断成立时,可以执行一条或多条命令
else	
	当上面的条件判断都不成立时,可以执行一条或多条命令
fi 		

如果数据需要进行多种不同的判断,则可以使用多分支结构 嵌套使用

[root@localhost ~]#vim reboot1.sh 
 
read -p "请输入yes或no:" TEST
if [ $TEST = "yes" ]
   then
     echo 你输入的为$TEST!
   elif [ $TEST = "no" ]
      then
         echo 你输入的为$TESTelse
   echo 你输入的${TEST}有错误,请重启输入yes或者no!  
fi

三元运算符

java,c
条件表达式?a:b
当条件表达式为真时,取a值;当条件表达式为假时,取b值

shell 表示三元运算符
[ 表达式 ] && a || b

双分支

if [ 表达式 ];then
...
else
...
fi

单分支

if [ 表达式 ];then
...
fi

[ 表达式 ] && a

[ 表达式 ] || a

[ 表达式 ] && a || b

多分支
if [ 表达式 ];then
...
elif [ 表达式 ];then
...
elif [ 表达式 ];then
...
[else]

fi

三、case

格式:
case 变量名称 in
模式1)
	命令序列1
    ;;
模式2)
	命令序列2
	;;
*)
	不包含第一个变量内容与第二个变量内容的其他程序执行段
	默认程序段
	;;
esac

注意点:

case行首必须以单词“in”,每一模式必须以单个右括号")"结束

双分号";;"表示命令序列的结束

模式字符串中,可以用方括号表示一个连续的范围,如"[0-9]";还可以使用竖杠|表示或,比如a|b

最后的)表示默认模式,其中的相当于通配符

示例:不管输出大小写字母,都能输出yes或者no

#!/bin/bash
read -p "请输入yes或者no:" i
case $i in  
[Yy]|[Yy][Ee][Ss])
echo "你输入的yes正确"
;;
[Nn]|[Nn][Oo])
echo "你输入的no正确"
;;
esac

a=10
b=20

临时变量 tmp

借用第三方参数

[root@localhost ww]# a=10
[root@localhost ww]# b=20
[root@localhost ww]# tmp=$a
[root@localhost ww]# a=$b
[root@localhost ww]# b=$tmp
[root@localhost ww]# echo $a
20
[root@localhost ww]# echo $b
10

posted @   DavinWw  阅读(106)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示