欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > shell条件测试和if语句

shell条件测试和if语句

2025/9/20 23:58:58 来源:https://blog.csdn.net/2401_84592402/article/details/139635359  浏览:    关键词:shell条件测试和if语句

“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”# shell条件测试和if语句

一、条件测试

1、$? 返回码

判断命令或者脚本是否执行成功(最近的一条)

0 true 为真就是成功 成立

非0 false 失败或者异常

2、test命令

可以进行条件测试,然后根据的返回值来判断条件是否成立

-e 测试文件或者目录是否存在 exist

-d 测试目录是否存在

-f 测试文件是否存在

-r 测试当前用户是否对文件或目录有读权限

-w 测试当前用户是否对文件或目录有写权限

-x 测试当前用户是否对文件或目录有执行权限

![“C:\Users\Jessica\Desktop\6.12.assets\image-20240612094159578.png”在这里插入图片描述

3、整数比较符

(以下操作符只能用于整数比较)

-eq 等于 == 既可以比较整数,也可以比较字符串

-ne 不等于 != 不等于

-gt 大于 >

-lt 小于 <

-ge 大于等于 >=

-le 小于等于 <=

在这里插入图片描述

4、比较符的第二种

[ ]

5、比较符的第三种

[[ ]] 可以使用更高级的模式,可以使用正则表达式,而且在双中括号中,使用字符串的时候可以不加引号

在这里插入图片描述

6、比较符的第四种

(( )) 运算符

逻辑与和逻辑或

与 && 条件都满足才成立 -a

或 || 有一个条件满足就成立 -o

在这里插入图片描述

在这里插入图片描述

二、if语句

1、单分支结构

if [ 3 -gt 2 ]
thenecho "ok" 
fi
# if 后面是条件测试语句
#then 命令序列 只有条件测试语句成立,才会执行then的命令模块
#fi 结束语句
sh if.sh
成立ok 不成立不显示

2、双分支结构

if [ 3 -gt 4 ]
thenecho "ok" 
elseecho "no"
fi
# sh if.sh
# 条件满足执行then,不满足执行else,执行完毕,语句结束
# 通过位置变量传参的方式给脚本内部传一个ip地址
# ping的通的要提示用户ip is online ,而且要保存到/opt/hosts.txt文件当中
# 如果ping不通,提示用户ip is offline
ping -c 3 $1
if [ $? -eq 0 ]
thenecho "ip is online"echo $1 >> /opt/host.txt
elseecho "ip is offline"
fi
# 随机输入一个整数,read -p输入一个数
# 判断这个是是偶数还是奇数,偶数提示偶数,奇数提示奇数
read -p "一个数" num
if [ $(($num%2)) -eq 0 ]
then echo "偶数"
elseecho  "奇数"
fi

3、多分支结构

if [ ]
then命令序列
elif [ ]
then命令序列
elif [ ]
then命令序列
else
命令序列
fi
read -p "请输入一个整数" num
if [ $num -lt 10 ]
then echo "1"
elif [ $num -gt 20 ]
thenecho "2"
elseecho "3"
fi
# 请输入您的分数,0~100
# 大于等于85,且小于等于100 优秀
# 大于等于70,且小于等于84  一般
# 大于等于60,且小于等于69  合格
# 小于60,30遍read -p "请输入分数:" num
if [[ $num -ge 85 && $num -le 100 ]]
thenecho "优秀"
elif [[ $num -ge 70 && $num -le 84 ]]
thenecho "一般"
elif [[ $num -ge 60 && $num -le 69 ]]
thenecho "合格"
elseecho "30遍" 
fi&&需要双中括号,但中括号可-a

4、嵌套

# num自定义输入,只有整数才可以进入到分数的区间
# 嵌套ifif
# 判断用户输入的是否是整数,不是整数,直接结束,提示用户输入非法,不是整数。read -p "请输入分数:" num
if [[ $num -eq $num ]]
then
if [[ $num -ge 85 && $num -le 100 ]]
thenecho "优秀"
elif [[ $num -ge 70 && $num -le 84 ]]
thenecho "一般"
elif [[ $num -ge 60 && $num -le 69 ]]
thenecho "合格"
elseecho "30遍" 
fi
elseecho "输入错误"
fi
# 会报错,属于冗余信息
# if [[ $num -eq $num ]] &> /dev/null 
# 解决冗余信息  /dev/null黑洞文件

5、case语句

# case语句 相当于多分钟结构
case 变量值 in
模式1)
命令序列
;;
模式2)
命令序列
;;
......
*)
命令序列
esac
#80~100
#70~79
#60~69
#0~59
read -p "输入一个成绩" num
[[ $num -ge 80 && $num -le 100 ]] && a="great"
[[ $num -ge 70 && $num -le 79 ]] && a="standard"
[[ $num -ge 60 && $num -le 69 ]] && a="pass"
[[ $num -ge 0 && $num -le 59 ]] && a="false"
case $a in 
great)echo "$a分,优秀"
;;
standard)echo "$a分,一般"
;;
false)echo "$a分,及格"
;;
*)echo "不及格"
esac
0 && $num -le 79 ]] && a="standard"
[[ $num -ge 60 && $num -le 69 ]] && a="pass"
[[ $num -ge 0 && $num -le 59 ]] && a="false"
case $a in 
great)echo "$a分,优秀"
;;
standard)echo "$a分,一般"
;;
false)echo "$a分,及格"
;;
*)echo "不及格"
esac

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词