bash脚本基础入门之条件测试

在运行bash命令的时候,无论成功还是失败都会返回为用户返回一个执行的结果,通常把他叫做退出状态码,每当我们运行命令的时候,退出状态码都会被记录在$?变量中,在命令行echo $?可以查看命令的执行结果,成功的值为0,失败的值为1-255之间的某个值。

注:在shell脚本中,退出状态码记录的是脚本最后一条命令,为方便检查脚本错误,可以使用exit #自定义退出状态码。

shell结构化命令中,如if...then语句、while...do...done语句等的CONDITION条件都是以命令的退出状态码,作为下一条命令是否执行的依据。它们无法测试跟命令的退出状态码无关的条件,例如我们要判断3是否大于5,是没法直接用3>5作为测试条件输出正确结果的,因此我们就需要借助于其它条件测试工具。

bash/shell提供了几个好用的条件测试工具,可用于测试跟命令的退出状态码无关的条件,真为0,假为非0值。(注:与C语言中的条件真假不同,切记!)

条件测试工具有:test EXPRESSION 、[ EXPRESSION ]或[[ EXPRESSION ]](注:EXPRESSION两边都要有空格,否则shell视为语法错误)、命令COMMAND(COMMAND不能放在[]中,在[]内的命令要使用``引用)。

test、[]、[[]]可以用于比较(测试)三类条件:整数比较、字符串比较、文件比较。不同的测试条件,运算符尽不不相同

整数比较运算符:

字符串比较运算符:

文件测试运算符:

逻辑操作运算符:

在shell的结构化命令中,如果CONDITION条件是命令时,要先理清是要用命令的运行结果作为测试条件还是命令的退出状态码作为测试条件。若使用命令运行的结果作为测试条件(实际上,这种情况经常被使用),那么应要使用命令引用,然后在用比较操作符。

#!/bin/bash
# 传递一个参数给脚本,此参数为用户名;
# 如果用户存在,则执行如下任务
# 如果用户的id号小于500,显示其为管理员或系统用户;
# 否则,显示其为普通用户;
if id $1 &> /dev/null; then
#要使用id -u的运行结果跟500做比较,因此先命令引用再比较操作符
        if [ "`id -u $1`" -lt 500 ]; then
                echo "$1为管理员或系统用户"
        else
                echo "$1为普通用户"
        fi

如果要使用命令的退出状态码作为测试条件,则要先运行命令再使用命令状态码,有两种表现形式:一种是

  if CMD; then
      ...
  fi

另一种是

CMD 
if [ $? -eq 0 ]; then
    ...
fi

shell中允许用户使用&&、||、!组合测试条件,进行条件测试。这三个操作符既可以用于连接[]与[],也可以用于连接命令,相当于结构化命令的使用

#!/bin/bash
#用ping命令测试172.16.100.X内的所有主机
#将在线的主机输出出来
for i in {1..255} 
do
        ping -c1 -w1 172.16.100.$i &> /dev/null
        [[ $? -eq 0 ]] && echo "172.16.100.$i 在线"
done
时间: 2024-10-26 14:52:06

bash脚本基础入门之条件测试的相关文章

Bash编程入门之条件测试(三)

条件测试语法 在bash的各种流程控制结构中通常要进行各种测试,然后根据测试结果执行不同的操作,有时也会通过与if等条件语句相结合,让我们可以方便的完成判断. 语法 支持三种格式的条件测试语法 test<测试表达式> [ <测试表达式> ] [[ <测试表达式> ]] 格式1和格式2是等价的,格式3为扩展的test命令 在[[]]中可以使用通配符进行匹配.&&.||.>.<等操作符可以应用与[[]]中,但不能应用与[]中. 范例 文件存在则输

使用脚本选项及组合条件测试

使用脚本选项及组合条件测试: 整数测试: -le 小于等于 -lt 小于 -ge大于等于 -gt大于 -eq等于 -ne不等于 字符测试: == 等于 != 不等于 >大于 <小于 -n 测试字符串是否为空,空为真 -z 测试字符串是否不为空,不空为真 文件测试: -e 测试文件是否存在 -f 测试文件是否为普通文件 -d测试文件是否为目录 -r测试文件是否有读权限 -w测试文件是否有写权限 -x 测试文件是否有执行权限 组合测试条件 -a 逻辑与 都满足 -o 逻辑或 满足一条即可 !  非

Linux基础之bash脚本编程初级-逻辑运算与测试

引言 前面介绍了bash编程的基础变量与算术表达式,本文介绍在脚本中的进阶知识:测试 在bash中测试大体分两部分:条件测试.组合测试. 而条件测试有分:数值测试.字符串测试.文件测试. 组合测试则有两种表达方式.具体是什么表达方式在文章中会有具体展示. 本文实验环境为CentOS7.2 Linux中为什么要学习测试(判断)? 当我第一次学习这部分内容时,觉得好难,好不爽.可是这又是想要继续学习Linux必须要掌握的知识点.为什么?我们在生活中面对各种选择时总要问问自己,我是否应该怎样,不这样会

跟马哥学linux (lesson 7)Bash脚本基础知识

一.Linux程序分类: 1.守护进程(Daemon):开机自动启动 常见linux后台守护进程列举: amd:NFS守侯进程 apmd:高级电源治理 Arpwatch:记录日志并构建一个在LAN接口上看到的以太网地址和ip地址对数据库 Autofs:自动安装治理进程automount,与NFS相关,依靠于NIS crond:linux下的计划任务 Dhcpd:启动一个DHCP(动态IP地址分配)服务器 Httpd:WEB服务器 Inetd:支持多种网络服务的核心守候程序 Lpd:打印服务器 n

bash脚本基础

编程基础:程序:指令+数据                过程式:以指令为中心,数据服务于指令                对象式:以数据为中心,指令服务于数据shell程序:提供了编程能力,解释执行编程语言:低级:汇编               高级:                        编译:高级语言–>编译器–>目标代码    java,c#                        解释:高级语言–>解释器–>机器代码    shell,perl,pyth

bash脚本编程入门

bash脚本编程(与面向过程相似) 一.基础知识 1.程序:语句和表达式 顺序执行 选择执行 循环执行 2. 程序 = 指令 + 数据 面向过程编程  :以指令为中心组织数据 面向对象编程  :以数据为中心组织指令 3.程序的执行模型 : (以C语言编程为例)编译执行:源代码->预处理->编译->汇编->链接(通过编译器)->运行 (bash脚本编程) 解释执行:源码  ->(解释器)-> 运行 bash脚本的解释器bash bash脚本一般以.sh结尾,例如vi

第七课-第二讲 07_02_bash脚本编程之六 使用脚本选项及组合条件测试

vim 编辑多个文件 vim file1 file2 file3 就打开了多个文件,但是默认显示第一个文件.next 在末行模式下输入:next 切换至下一个文件prev 末行模式下输入:prev 切换至上一个文件(如果当前文件有改动 要先保存,然后切换至上一个文件)last 在末行模式下输入:last 切换至最后一个文件first 在末行模式下输入:first 切换至第一个文件qa或者qall 在末行模式下输入:qa 一次性全部退出打开的文件 分屏显示一个文件 Ctrl+w,s 按下Ctrl+

Shell脚本编程算术运算和条件测试

算术运算 1.bash中的算术运算:help let +, -, *, /, %取模(取余), **(乘方) 实现算术运算: (1) let var=算术表达式 (2) var=$[算术表达式] (3) var=$((算术表达式)) (4) var=$(expr arg1 arg2 arg3 ...) (5) declare –ivar= 数值 (6) echo '算术表达式' | bc 2.乘法符号有些场景中需要转义,如* 3.bash有内建的随机数生成器: $RANDOM(0-32767)

linux Bash脚本基础符号总结 (一)

1.初识Bash 首先编译一个简单的bash vim hello.sh 使用vim编辑hello.sh ,输入如下代码并保存: #!/bin/bash echo hello word 运行Bash脚本的方式: # 使用shell来执行 $ sh hello.sh # 使用bash来执行 $ bash hello.sh 还可以让脚本本身就具有可执行权限,通过chmod命令可以修改: # 赋予脚本的所有者该执行权限,允许该用户执行该脚本 $ chmod u+x hello.sh # 执行命令,这将使