千家信息网

Shell脚本之if条件语句

发表于:2024-10-06 作者:千家信息网编辑
千家信息网最后更新 2024年10月06日,条件测试test命令:测试特定的表达式是否成立,当条件成立时,测试语句的返回值为0,否则为其他数值。格式一:test 条件表达式格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)文件测试:格式
千家信息网最后更新 2024年10月06日Shell脚本之if条件语句

条件测试

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

格式一:test 条件表达式
格式二:[ 条件表达式 ] (注意中括号与表达式间有空格)

文件测试:

格式:[ 操作符 文件或目录 ] (注意中括号与表达式间有空格)

常用的测试操作符:

-d:测试是否为目录(Directory)-e:测试目录或文件是否存在(Exist)-f:测试是否为文件(File)-r:测试当前用户是否有权限读取(Read)-w:测试当前用户是否有权限写入(Write)-x:测试当前用户是否有权限执行(eXcute)
[root@localhost ~]# [ -d /media/cdrom ][root@localhost ~]# echo $?0                                                                                    //返回0表示条件成立[root@localhost ~]# [ -d /media/cdrom/Server ][root@localhost ~]# echo $?1                                                                                   //返回1表示条件不成立[root@localhost ~]# [ -d /media/cdrom ] && echo "YES"      // " &&"表示当前面的测试成立时,则执行后面的命令YES[root@localhost ~]# [ -r /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]# [ -w /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]# [ -x /media/cdrom ][root@localhost ~]# echo $?1[root@localhost ~]#

整数值比较:

格式:[ 整数1 操作符 整数2 ] (注意中括号与表达式间有空格)

常用的测试操作符:

-eq:等于(Equal)-ne:不等于(Not Equal)-gt:大于(Greater Than)-lt:小于(Lesser Than)-le:小于或等于(Lesser or Equal)-ge:大于或等于(Greater or Equal)
[root@localhost ~]# who | wc -l7[root@localhost ~]# [ $(who | wc -l) -gt 5 ] && echo "Too many."Too many.[root@localhost ~]# [ $(who I wc -l) -ge10 ] && echo ">= 10."

字符串与逻辑测试

字符串比较:

格式一:[ 字符串1 = 字符串2 ] 或[ 字符串1 != 字符串2 ] (" ! "表示取反)
格式二:[ -z 字符串 ]

常用的测试操作符:

=:字符串内容相同!=:字符串内容不同,!号表示相反的意思-z:字符串内容为空
[root@localhost ~]# echo $LANGzh_ CN.UTF-8[root@localhost ~]# [ $LANG != "en.US" ] && echo "Not en.US"           //测试当前语言环境Not en.US[root@localhost ~]# read -p"是否覆盖现有文件(yes/no) ?"ACK            //测试读入的字符串是否为yes是否覆盖现有文件(yes/no) ? yes[root@localhost ~]# [ $ACK = "yes"I && echo"覆盖"覆盖

逻辑测试:

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

常用的测试操作符:

-a或&&:逻辑与,"而且"的意思-o或||: 逻辑或, "或者"的意思!:逻辑否
[root@localhost ~]#[ -d /etc ] && [ -r /etc ] && echo"You can open it"[root@localhost ~]#[ -d /etc ] II [ -d /home ] && echo"ok"

if语句

if单分支语句

基本格式:

if  条件测试操作    then  命令序列fi

例子:判断挂载点目录,若不存在则自动创建。

[root@localhost ~]# vim chkmountdir.sh#!/bin/bashMOUNT_DIR="/media/cdrom/"                 //当目录不存在时执行if [ ! -d $MOUNT_DIR ]then    mkdir -p $MOUNT_ DIRfi

if双分支语句

基本格式:

if  条件测试操作    then  命令序列1    else  命令序列2fi

例子:判断目标主机是否存活,显示检测结果。

[root@localhost ~]# vim pinghost.sh#!/bin/bashping -c 3 -i 0.2 -W 3 $1 &> /dev/null        //-c包的个数,-i间隔秒数,-W等待时间if [ $? -eq 0 ]                                               //判断ping命令的检测结果then    echo "Host $1 is up."                         else    echo "Host $1 is down."fi

if多分支语句

基本格式:

if  条件测试操作1    then  命令序列1elif  条件测试操作2    then  命令序列2else    命令序列3fi

例子:判断分数范围,分出优秀、合格、不合格三档。

[root@localhost ~]# vim gradediv.sh#!/bin/bashread -p "请输入您的分数(0-100):" GRADEif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ]then    echo "$GRADE分,优秀!"elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ]then    echo "$GRADE分,合格!"else    echo "$GRADE分,不合格!"fi

if嵌套语句

嵌套结构其实就是在前面这三种结构里,再加一层if判断语句。下面我直接用例子演示说明吧。这个Shell脚本主要实现功能就是,当你输入成绩时,会进行一次判断,当输入成绩为10秒以内(包含10秒),则进入决赛,否则淘汰。而进入决赛后,会提示输入性别进行判断分组,性别为男则分到男子组,否则分到女子组。

[root@localhost opt]# vim group.sh#!/bin/bashread -p "请输入您的成绩:" scoif [ $sco -le 10 ]then        echo "恭喜您进入决赛!"        read -p "请输入您的性别:" sex        if [ $sex = "男" ]        then                echo "您被分到了男子组!"        else                echo "您被分到了女子组!"        fielse        echo "很遗憾您被淘汰了!"fi

执行结果如下:

[root@localhost opt]# chmod +x group.sh [root@localhost opt]# ./group.sh 请输入您的成绩:9恭喜您进入决赛!请输入您的性别:男您被分到了男子组![root@localhost opt]# ./group.sh 请输入您的成绩:9恭喜您进入决赛!请输入您的性别:女您被分到了女子组![root@localhost opt]# ./group.sh 请输入您的成绩:11很遗憾您被淘汰了![root@localhost opt]# 
测试 命令 字符 字符串 格式 输入 条件 操作符 表达式 语句 序列 成绩 文件 性别 目录 逻辑 决赛 例子 常用 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 系统网络安全管理制度 电脑上有必要装数据库吗 深圳市盈科网络技术有限公司 河南长天网络技术服务 京东百万数据库 流星群侠传全部服务器 服务器远程管理 加密 建立完善安全风险数据库 应用服务器管理 深圳市易游网络技术公司 a10网络技术支持 恒生互联网科技业指数跟踪指数 广州深圳软件开发公司排名 中学网络安全方面需要做哪些 大学网络安全策划书活动流程 凤凰系统网络技术有限公司 网络安全严重程度分级 美国网络安全框架是谁启动 清除管理服务器信息 一站网络技术有限公司试客联盟 数据库设置快捷表 公交卡服务器异常降级处理 软件开发和数据处理选择哪个 服务器映射端口安全吗 阿里云服务器ssh登录 toad编辑数据库 网络技术先学什么开始 美国网络安全框架是谁启动 睿迅网络技术有限公司怎么样 网络安全管理制度三级文档
0