iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何在Shell脚本中使用条件测试和if条件语句
  • 274
分享到

如何在Shell脚本中使用条件测试和if条件语句

2023-06-09 12:06:01 274人浏览 泡泡鱼
摘要

今天就跟大家聊聊有关如何在shell脚本中使用条件测试和if条件语句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、条件测试操作要使Shell脚本程序具备一定的“智能”,面临的第一

今天就跟大家聊聊有关如何在shell脚本中使用条件测试和if条件语句,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、条件测试操作

要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作。Shell环境根据命令执行后的返回状态值(¥?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)。

使用test测试命令时,包括以下两种形式:

test 条件表达式[ 条件表达式 ]

这两种方式的作用完全相同,但通常后一种形式更为常用,需要注意的是,方括号“[“ 或 ”]”与条件表达式之间需要至少一个空格进行分隔。

1、文件测试:

-d:测试是否为目录(Directory);

-e:测试文件或目录是否存在(Exist);

-f:测试是否为文件(File);

-r:测试当前用户是否有权限读取(Read);

-w:测试当前用户是否有权限写入(Write);

-x:测试是否设置有可执行(Excute)权限;

执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行以下操作可以测试目录/media/是否存在,如果返回值$?为0,表示存在此目录,否则表示不存在或者虽然存在但不是目录。

[root@Centos01 ~]# test -d /boot   <!--测试目录是否存在-->[root@centos01 ~]# echo $?      <!--查看前一命令的返回值-->0           <!--返回0表示条件成立-->

若测试的条件不成立,则测试操作的返回值将不为0(通常为1).

[root@centos01 ~]# test -d /ertec    <!--测试目录是否存在-->[root@centos01 ~]# echo $?     <!--查看前一命令的返回值-->1     <!--返回1表示条件不成立-->

2、整数值比较:

-eq:第一个数等于(Equal)第二个数;

-ne:第一个数不等于(Not Equal)第二个数;

-gt:第一个数大于(Greater Than)第二个数;

-lt:第一个数小于(Lesser Than)第二个数;

-le:第一个数小于或等于(Lesser or Equal)第二个数;

-ge:第一个数大于或等于(Greater or Equal)第二个数;
整数值比较在Shell脚本编写中的应用较多。例如,用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本号是否符号要求等。实际 使用时,往往会通过变量引用、命令替换等方式来获取一个数值。

3、字符串比较:

=:第一个字符串与第二个字符串相同。

!=:第一个字符串与第二个字符串不相同,其中 “ !”表示取反。

-z:检查字符串是否为空,对于未定义或赋予空值的变量将是为空串。

[root@centos01 ~]# a=1[root@centos01 ~]# b=2 [root@centos01 ~]# [ $a = $b ] && echo "yes" <!--当1等于2显示yes,不等于显示为空-->      <!--显示为空-->[root@centos01 ~]# a=1 [root@centos01 ~]# b=2 [root@centos01 ~]# [ $a != $b ] && echo "yes" <!--当1不等于2显示yes,否则显示为空-->yes    <!--1不等于2,显示yes-->

4、逻辑测试:

  • &&:逻辑与,表示“而且”,只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立),使用test命令测试时,“&&”可以使用“-a”代替。

  • ||:逻辑或,表示“或者”,只要前后两个条件有一个成立,整个测试命令返回的值即为0(结果成立)。使用test命令测试时可以使用“-o”代替。

  • !:逻辑否,表示“不”,只有当条件不成立时,整个测试命令返回的值才为0(结果成立)。

示例如下:

[root@centos01 ~]# a=100[root@centos01 ~]# [ $a = 100 ] && [ $a != 50 ] && echo "yes" <!--使用逻辑与运算,两个条件为真显示yes-->yes   <!--两个条件为真,显示yes-->[root@centos01 ~]# c=100 [root@centos01 ~]# [ $a = 100 ] || [ $a -ge 50 ] && echo "yes"  <!--使用逻辑与运算,两个条件一个为真显示为yes-->yes   <!--两个条件一个为真,显示yes-->

二、使用if条件语句

1、单分支if语句

if语句的“分支”指的是不同测试结果所对应的执行语句(一条或多条)。对于单分支的选择结构,只有在“条件成立”时才会执行相应的代码,否则不会执行任何操作。单分支if语句的语法格式如下所示:

如何在Shell脚本中使用条件测试和if条件语句

单分支if语句示例:

[root@centos01 ~]# cd /usr/src/ppp   <!--验证目录是否存在-->-bash: cd: /usr/src/ppp: 没有那个文件或目录 <!--ppp目录不存在-->[root@centos01 ~]# vim if_dan.sh <!--编写创建/usr/src/ppp目录的脚本-->#!/bin/bash      <!--脚本声明-->mount="/usr/src/ppp"    <!--定义一个变量-->if [ ! -d $mount ]      <!--测试条件-->then         <!--如果满足则执行下面的命令-->    mkdir -p $mount       fi       <!--if语句结束-->[root@centos01 ~]# chmod +x if_dan.sh    <!--添加权限-->[root@centos01 ~]# ./if_dan.sh     <!--执行脚本自动创建-->[root@centos01 ~]# cd /usr/src/ppp/ <!--查看目录是否创建成功-->[root@centos01 ppp]# ls

2、双分支if语句

对于双分支的选择结构,要求针对“条件成立” “条件不成立”两种情况分别执行不同的操作。双分支if语句的语法格式如下所示:

如何在Shell脚本中使用条件测试和if条件语句

双分支if语句示例:

[root@centos01 ~]# vim if_shuang.sh <!--编写脚本测试网络连通性-->#!/bin/bashping -c 3 -i 0.2 -W 3 $1 &> /dev/null <!--ping 3次,间隔0.2秒,超时3秒,$1为位置变量-->if [ $? -eq 0 ]     <!--测试条件为前一条的命令执行成功-->then       <!--如果成功,则执行以下命令-->  echo "Host:$1 is UP!!!"else        <!--若不成功,则执行以下命令-->  echo "Host:$1 is DOWN!!!"fi   <!--if语句结束-->[root@centos01 ~]# chmod +x if_shuang.sh    <!--添加执行权限-->[root@centos01 ~]# ./if_shuang.sh 192.168.100.10   <!--使用脚本测试100.10网络是否通信-->Host:192.168.100.10 is UP!!!   <!--UP证明这台主机是开机状态-->[root@centos01 ~]# ./if_shuang.sh 192.168.100.103 <!--使用脚本 测试100.103网络是否通信-->Host:192.168.100.103 is DOWN!!!      <!--DOWN证明这台主机是关机状态-->

3、多分支if语句

由于if语句可以根据测试结果的成立、不成立分别执行操作,所有能够嵌套使用,进行多次判断。例如,首先判断某学生的得分是否及格,若及格则再次判断是否高于90分等。多分支if语句的语法格式如下:

如何在Shell脚本中使用条件测试和if条件语句

多分支if语句示例:

[root@centos01 ~]# vim if_duo.sh  <!--编写脚本测试学生成绩-->#!/bin/bashread -p "请输入考试成绩:" insert if [ $insert -ge 85 ] && [ $insert -le 100 ]  <!--85~100分,优秀-->  then    echo "恭喜您考试成绩为优秀!!!"elif [ $insert -ge 70 ] && [ $insert -le 84 ] <!--70~84分,合格-->  then    echo "恭喜您考试成绩为合格!!!"else     <!--其他分数,不合格-->    echo "很遗憾您考试成绩可以收拾收拾回家种苞米了!!!"fi      <!--if语句结束-->[root@centos01 ~]# chmod +x if_duo.sh   <!--添加执行权限-->[root@centos01 ~]# ./if_duo.sh  <!--运行脚本-->请输入考试成绩:94    <!--94分优秀-->恭喜您考试成绩为优秀!!![root@centos01 ~]# ./if_duo.sh请输入考试成绩:82恭喜您考试成绩为合格!!![root@centos01 ~]# ./if_duo.sh 请输入考试成绩:71恭喜您考试成绩为合格!!![root@centos01 ~]# ./if_duo.sh 请输入考试成绩:32很遗憾您考试成绩可以收拾收拾回家种苞米了!!!

看完上述内容,你们对如何在Shell脚本中使用条件测试和if条件语句有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 如何在Shell脚本中使用条件测试和if条件语句

本文链接: https://www.lsjlt.com/news/256069.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++ 生态系统中流行库和框架的贡献指南
    作为 c++++ 开发人员,通过遵循以下步骤即可为流行库和框架做出贡献:选择一个项目并熟悉其代码库。在 issue 跟踪器中寻找适合初学者的问题。创建一个新分支,实现修复并添加测试。提交...
    99+
    2024-05-15
    框架 c++ 流行库 git
  • C++ 生态系统中流行库和框架的社区支持情况
    c++++生态系统中流行库和框架的社区支持情况:boost:活跃的社区提供广泛的文档、教程和讨论区,确保持续的维护和更新。qt:庞大的社区提供丰富的文档、示例和论坛,积极参与开发和维护。...
    99+
    2024-05-15
    生态系统 社区支持 c++ overflow 标准库
  • c++中if elseif使用规则
    c++ 中 if-else if 语句的使用规则为:语法:if (条件1) { // 执行代码块 1} else if (条件 2) { // 执行代码块 2}// ...else ...
    99+
    2024-05-15
    c++
  • c++中的继承怎么写
    继承是一种允许类从现有类派生并访问其成员的强大机制。在 c++ 中,继承类型包括:单继承:一个子类从一个基类继承。多继承:一个子类从多个基类继承。层次继承:多个子类从同一个基类继承。多层...
    99+
    2024-05-15
    c++
  • c++中如何使用类和对象掌握目标
    在 c++ 中创建类和对象:使用 class 关键字定义类,包含数据成员和方法。使用对象名称和类名称创建对象。访问权限包括:公有、受保护和私有。数据成员是类的变量,每个对象拥有自己的副本...
    99+
    2024-05-15
    c++
  • c++中优先级是什么意思
    c++ 中的优先级规则:优先级高的操作符先执行,相同优先级的从左到右执行,括号可改变执行顺序。操作符优先级表包含从最高到最低的优先级列表,其中赋值运算符具有最低优先级。通过了解优先级,可...
    99+
    2024-05-15
    c++
  • c++中a+是什么意思
    c++ 中的 a+ 运算符表示自增运算符,用于将变量递增 1 并将结果存储在同一变量中。语法为 a++,用法包括循环和计数器。它可与后置递增运算符 ++a 交换使用,后者在表达式求值后递...
    99+
    2024-05-15
    c++
  • c++中a.b什么意思
    c++kquote>“a.b”表示对象“a”的成员“b”,用于访问对象成员,可用“对象名.成员名”的语法。它还可以用于访问嵌套成员,如“对象名.嵌套成员名.成员名”的语法。 c++...
    99+
    2024-05-15
    c++
  • C++ 并发编程库的优缺点
    c++++ 提供了多种并发编程库,满足不同场景下的需求。线程库 (std::thread) 易于使用但开销大;异步库 (std::async) 可异步执行任务,但 api 复杂;协程库 ...
    99+
    2024-05-15
    c++ 并发编程
  • 如何在 Golang 中备份数据库?
    在 golang 中备份数据库对于保护数据至关重要。可以使用标准库中的 database/sql 包,或第三方包如 github.com/go-sql-driver/mysql。具体步骤...
    99+
    2024-05-15
    golang 数据库备份 mysql git 标准库
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作