if条件测试语句-4.3.1-树叶云linux教程 (if条件测试语句有几种结构)

教程大全 2025-07-20 14:03:09 浏览

if条件测试语句可以让脚本根据实际情况自动执行相应的命令。从技术角度来讲,if语句分为单分支结构、双分支结构、多分支结构;其复杂度随着灵活度一起逐级上升。

if条件语句的单分支结构由if、then、fi关键词组成,而且只在条件成立后才执行预设的命令,相当于口语的“如果……那么……”。单分支的if语句属于最简单的一种条件判断结构,语法格式如图4-17所示。

图4-17 单分支的if语句

下面使用单分支的if条件语句来判断/media/cdrom文件是否存在,若存在就结束条件判断和整个Shell脚本,反之则去创建这个目录:

[root@linuxprobe ~]# vim mkcdrom.sh#!/bin/bashDIR="/media/cdrom"if [ ! -e $DIR ]thenmkdir -p $DIRfi

由于第5章才讲解用户身份与权限,因此这里继续用“bash 脚本名称”的方式来执行脚本。在正常情况下,顺利执行完脚本文件后没有任何输出信息,但是可以使用ls命令验证/media/cdrom目录是否已经成功创建:

[root@linuxprobe ~]# bash mkcdrom.sh[root@linuxprobe ~]# ls -d /media/cdrom/media/cdrom

if条件语句的双分支结构由if、then、else、fi关键词组成,它进行一次条件匹配判断,如果与条件匹配,则去执行相应的预设命令;反之则去执行不匹配时的预设命令,相当于口语的“如果……那么……或者……那么……”。if条件语句的双分支结构也是一种很简单的判断结构,语法格式如图4-18所示。

图4-18 双分支的if条件语句

下面使用双分支的if条件语句来验证某台主机是否在线,然后根据返回值的结果,要么显示主机在线信息,要么显示主机不在线信息。这里的脚本主要使用ping命令来测试与对方主机的网络联通性,而Linux系统中的ping命令不像Windows一样尝试4次就结束,因此为了避免用户等待时间过长,需要通过-c参数来规定尝试的次数,并使用-i参数定义每个数据包的发送间隔,以及使用-W参数定义等待超时时间。

[root@linuxprobe ~]# vim chkhost.sh#!/bin/bashping -c 3 -i 0.2 -W 3 $1 &> /dev/nullif [ $? -eq 0 ]thenecho "Host $1 is On-line."elseecho "Host $1 is Off-line."fi

我们在4.2.3小节中用过$?变量,作用是显示上一次命令的执行返回值。若前面的那条语句成功执行,则$?变量会显示数字0,反之则显示一个非零的数字(可能为1,也可能为2,取决于系统版本)。因此可以使用整数比较运算符来判断$?变量是否为0,从而获知那条语句的最终判断情况。这里的 服务器 IP地址为192.168.10.10,我们来验证一下脚本的效果:

[root@linuxprobe ~]# bash chkhost.sh 192.168.10.10Host 192.168.10.10 is On-line.[root@linuxprobe ~]# bash chkhost.sh 192.168.10.20Host 192.168.10.20 is Off-line.

if条件语句的多分支结构由if、then、else、elif、fi关键词组成,它进行多次条件匹配判断,这多次判断中的任何一项在匹配成功后都会执行相应的预设命令,相当于口语的“如果……那么……如果……那么……”。if条件语句的多分支结构是工作中最常使用的一种条件判断结构,尽管相对复杂但是更加灵活,语法格式如图4-19所示。 第4章 Vim编辑器与Shell命令脚本。第4章 Vim编辑器与Shell命令脚本。

图 4-19 多分支的if条件语句

if条件测试语句

下面使用多分支的if条件语句来判断用户输入的分数在哪个成绩区间内,然后输出如Excellent、Pass、Fail等提示信息。在Linux系统中,read是用来读取用户输入信息的命令,能够把接收到的用户输入信息赋值给后面的指定变量,-p参数用于向用户显示一定的提示信息。在下面的脚本示例中,只有当用户输入的分数大于等于85分且小于等于100分,才输出Excellent字样;若分数不满足该条件(即匹配不成功),则继续判断分数是否大于等于70分且小于等于84分,如果是,则输出Pass字样;若两次都落空(即两次的匹配操作都失败了),则输出Fail字样:

[root@linuxprobe ~]# vim chkscore.sh#!/bin/bashread -p "Enter your score(0-100):" GRADEif [ $GRADE -ge 85 ] && [ $GRADE -le 100 ] ; thenecho "$GRADE is Excellent"elif [ $GRADE -ge 70 ] && [ $GRADE -le 84 ] ; thenecho "$GRADE is Pass"elseecho "$GRADE is Fail"fi[root@linuxprobe ~]# bash chkscore.shEnter your score(0-100):8888 is Excellent[root@linuxprobe ~]# bash chkscore.shEnter your score(0-100):8080 is Pass

下面执行该脚本。当用户输入的分数分别为30和200时,其结果如下:

[root@linuxprobe ~]# bash chkscore.shEnter your score(0-100):3030 is Fail[root@linuxprobe ~]# bash chkscore.shEnter your score(0-100):200200 is Fail

为什么输入的分数为200时,依然显示Fail呢?原因很简单—没有成功匹配脚本中的两个条件判断语句,因此自动执行了最终的兜底策略。可见,这个脚本还不是很完美,建议读者自行完善这个脚本,使得用户在输入大于100或小于0的分数时,给予Error报错字样的提示。


通过DEbug演示以下程序: MOV AX, 100 MOV BX, 120 ADD AX, BX 说明输入程序、执行程序、查看寄存器的方法

命令行输入“debug”进入debug,键入-a即可输入程序,输入完成按2次回车退出a命令,输入-t执行,同时显示各个寄存器状态。MOV AX, 100 ;将100放入寄存器AXMOV BX, 120 ;将120放入寄存器BXADD AX, BX;将AX里的值加上BX寄存器里的值,结果存入AX寄存器执行完程序,AX里面的值为220,BX为120

怎么查看linux是lubuntu

1,查看内核版本命令:cat /proc/versionuname -auname -rcat /etc/issueman uname2,查看linux版本:抄录如下:1) 登录到服务器执行 lsb_release -a ,即可列出所有版本信息,例如:[root@3.5.5Biz-46 ~]# lsb_release -aLSB Version: 1.3Distributor ID: RedHatEnterpriseASDescrīption: Red Hat Enterprise Linux AS release 4 (Nahant Update 1)Release: 4Codename: NahantUpdate1[root@3.5.5Biz-46 ~]#这个命令适用于所有的linux,包括Redhat、SUSE、Debian等发行版。2) 登录到linux执行cat /etc/redhat-release ,例如如下:[root@3.5.5Biz-46 ~]# cat /etc/redhat-releaseRed Hat Enterprise Linux AS release 4 (Nahant Update 1)[root@3.5.5Biz-46 ~]#这种方式下可以直接看到具体的版本号,比如 AS4 Update 13)登录到linux执行rpm -q redhat-release ,例如如下[root@3.5.5Biz-46 ~]# rpm -q redhat-releaseredhat-release-4AS-2.4[root@3.5.5Biz-46 ~]#这种方式下可看到一个所谓的release号,比如上边的例子是2.4这个release号和实际的版本之间存在一定的对应关系,如下:redhat-release-3AS-1 -> Redhat Enterprise Linux AS 3redhat-release-3AS-7.4 -> Redhat Enterprise Linux AS 3 Update 4redhat-release-4AS-2 -> Redhat Enterprise Linux AS 4redhat-release-4AS-2.4 -> Redhat Enterprise Linux AS 4 Update 1redhat-release-4AS-3 -> Redhat Enterprise Linux AS 4 Update 2redhat-release-4AS-4.1 -> Redhat Enterprise Linux AS 4 Update 3redhat-release-4AS-5.5 -> Redhat Enterprise Linux AS 4 Update 4

linux下如何提取日志中指定的一段内容?100分急求!!!

很简单,使用grep -A 3 SIP 文件名-A 3表示关键词所在行以下三行的内容

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐