.bash把[[ $a -lt $b ]]看作一个单独的元素,并且返回一个退出码。退出码0为真,非零为假

例如:

a=

b=c

[[ $a -lt $b ]]

echo $?               #  a小于b为真

[[ $b -lt $a ]]  

echo $?               #  b小于a为假

.  ((...))和let...结果也能够返回一个退出码。当它们所测试的算术表达式的结果为非0的时候,它们的退出码将返回非0。退出码0为真,非零为假

例如:

let "1<2"

echo $?              #

((  &&  )) 

echo $?              #

. if命令可以测试任何命令,不仅仅是括号中的条件

例如,新建脚本test.sh,

#!/bin/bash
if grep -q root $ # 参数提供的文件中,如果含有root字符串,则返回File contains at last on occurence of root # 其中-q用来阻止echo的输出grep获得的内容
then
echo "$1 contains at last on occurence of root"
else
echo "$1 does not contain"
fi exit 并chmod test.sh, 执行: ./test.h /etc/passwd 之后,返回 File contains at last on occurence of root .一个if/then结构可以包含多级比较和tests(嵌套) if [ condition - true ] then command command ... else #可选 command command ... fi 当if和then在一个条件测试的同一行时,必须用";"来终止if表达式(因为:if和then都是关键字) 例如: if [ -x "$filename" ] ; then .elif的用法: elif是else if的缩减形式: if [ condition1 ] then command command command elif [ condition ] #same as else if then command command else default-command (type ... #ls,test,cd 可以查看相应命令的类型 或 在/sbin/和/bin/下的路径) .几种等效命令:test,/usr/bin/test,[],/usr/bin/[] #!/bin/bash echo if test -z "$1" #if /usr/bin/test -z "$1" 等效 then echo "input length is 0" else echo "input length is not 0" fi echo if [ -z "$1" ] #if /usr/bin/[ -z "$1" ] 等效 then echo "input length is 0" else echo "input length is not 0" fi exit .[[]]结构将没有文件扩展或单词分离,但是会发生参数扩展和命令替换 .在if后,也可以不用test/[] 例如 #!/bin/bash dir=$ if cd "$dir" >/dev/null #>/dev/null隐藏了出错提示 then echo "Now in $dir" else echo "Can't change to $dir" fi .test或[]的使用,也不一定要有if 例如 #!/bin/bash var1= var2= [ "$var1" -ne "$var2" ] && echo "$var1 is not equal to $var2" home=/home [ -d $home ] || echo "$home directory does not exist" 注意: &&:前一个操作失败,后一个就不再执行 || : 前一个操作成功,后一个就不再执行 .算数测试的使用(()) (())结构计算并测试算数表达式的结果,退出码与[]相反 true返回0,false返回1 (()) #返回1 (()) #返回0 ((>)) #返回0 ((>)) #返回1 ((-)) #返回1 ((/)) #大于1,返回0 ((/)) #小于1,返回1 ((/)) #报错,返回1 .文件测试操作: 返回true,如果: -e 文件存在 -a 文件存在(已被弃用) -f 被测文件是一个regular文件(正常文件,非目录或设备) -s 文件长度不为0 -d 被测对象是目录 -b 被测对象是块设备 -c 被测对象是字符设备 -p 被测对象是管道 -h 被测文件是符号连接 -L 被测文件是符号连接 -S(大写) 被测文件是一个socket -t 关联到一个终端设备的文件描述符。用来检测脚本的stdin[-t0]或[-t1]是一个终端 -r 文件具有读权限,针对运行脚本的用户 -w 文件具有写权限,针对运行脚本的用户 -x 文件具有执行权限,针对运行脚本的用户 -u set-user-id(suid)标志到文件,即普通用户可以使用的root权限文件,通过chmod +s file实现 -k 设置粘贴位 -O 运行脚本的用户是文件的所有者 -G 文件的group-id和运行脚本的用户相同 -N 从文件最后被阅读到现在,是否被修改 f1 -nt f2 文件f1是否比f2新 f1 -ot f2 文件f1是否比f2旧 f1 -ef f2 文件f1和f2是否硬连接到同一个文件 .二元比较操作符,比较变量或比较数字 整数比较: -eq 等于 if [ "$a" -eq "$b" ] -ne 不等于 if [ "$a" -ne "$b" ] -gt 大于 if [ "$a" -gt "$b" ] -ge 大于等于 if [ "$a" -ge "$b" ] -lt 小于 if [ "$a" -lt "$b" ] -le 小于等于 if [ "$a" -le "$b" ] < 小于(需要双括号) (( "$a" < "$b" )) <= 小于等于(...) (( "$a" <= "$b" )) > 大于(...) (( "$a" > "$b" )) >= 大于等于(...) (( "$a" >= "$b" )) 字符串比较: = 等于 if [ "$a" = "$b" ] == 与=等价 != 不等于 if [ "$a" = "$b" ] < 小于,在ASCII字母中的顺序: if [[ "$a" < "$b" ]] if [ "$a" /< "$b" ] #需要对<进行转义 > 大于 -z 字符串为null,即长度为0 -n 字符串不为null,即长度不为0 注意: 使用-z或-n判断字符串变量时,必须要用""把变量引起来。 例如: if [ -n $string1 ] #string1未被初始化 then echo "String /"string1/" is not null." else echo "String /"string1/" is null" fi #结果显示string1为非空,错误 if [ -n "$string1" ] #string1仍然未被初始化 then echo "String /"string1/" is not null" else echo "String /"string1/" is null" fi #结果显示string1为空,结果正确 if [ $string1 ] #string1裸体判断 then echo "String /"string1/" is not null" else echo "String /"string1/" is null" fi #结果正确 #但这种用法存在漏洞,比如: string1="1 > 2" if [ $string1 ] then echo "String /"string1/" is not null" else echo "String /"string1/" is null" fi #实际上[]中的内容被扩展为[ "1 > 2" ],所以结果会出错。而使用[[ $string1 ]],则可以避免错误 .混合比较: -a 逻辑与:exp1 -a exp2,如果exp1跟exp2都为true的话,这个表达式将返回true if [ exp1 -a exp2 ] 与[[ condition1 && condition2 ]]功能相同 -o 逻辑或:exp1 -o exp2,如果exp1、exp2中,有一个为true的话,那么表达式返回true if [ exp1 -o exp2 ] 与[[ condition1 || condition2 ]]功能相同 .嵌套的if/then条件test 可以使用if/then来进行嵌套的条件test。最终的结果与上边的使用&&混合比较是相同的 if [ condition1 ] then if [ condition2 ] then do-something fi fi

bash if 表达式的更多相关文章

  1. bash if 表达式含义

    [ -a FILE ] 如果 FILE 存在则为真. [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真. [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真. [ ...

  2. Bash 翻译

    Bash参考手册 目录 1简介 1.1什么是Bash? 1.2什么是shell? 2定义 3基本外壳功能 3.1 Shell语法 3.1.1外壳操作 3.1.2报价 3.1.2.1逃逸角色 3.1.2 ...

  3. bash參考手冊之六(Bash特性)

    6 Bash 特性 这部分描写叙述Bash独有的特性. *  调用Bash : Bash能够接受的命令行选项. *  Bash启动文件 : Bash何时及怎样运行脚本. *  交互Shell : 什么 ...

  4. Linux Shell之表达式

    严格来说,shell中没有表达式的概念.Shell本身事实上仅仅是一堆命令的集合.当然也不是胡乱的堆在一起.而是有一定的组织.仅仅是这个组织不那么严谨.所以本文不是要真的总结所谓的表达式,而是把she ...

  5. 6.Bash的功能

    6.Bash的功能本章介绍 Bash 的特色功能.6.1 Bash的启动 bash [长选项] [-ir] [-abefhkmnptuvxdBCDHP] [-o 选项] [-O shopt 选项] [ ...

  6. Shell编程-05-Shell中条件测试与比较

    目录 Shell脚本条件测试 Shell文件测试 Shell字符测试 Shell整数测试 Shell逻辑测试 Shell条件测试总结 Shell脚本条件测试     在Shell脚本中各种条件结构和流 ...

  7. 转 zabbix 优化方法 以及 后台数据库查询方法 两则

    ############sample 1 https://blog.51cto.com/sfzhang88/1558254 如何从Zabbix数据库中获取监控数据 sfzhang关注6人评论40627 ...

  8. shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected)

    shell报错:-bash: [: ==: 期待一元表达式 解决方法 ([: ==: unary operator expected) blogdaren 2015-02-26  抢沙发 14916人 ...

  9. Bash的条件表达式求值

    Bash的条件控制允许两种类型:1)命令的成功或失败 2)逻辑表达式的真假这两种类型都可以通过退出状态($?)来检验,$?=0为真,否则为假 一.命令的成功或失败 通过查看$?值$echo $? 二. ...

随机推荐

  1. VPS用LNMP安装WordPress

    前言 前几天,朋友手头上有一个空闲的vps,256M内存,我决定拿来玩一下.经过一番思考,还是用来挂站吧.然后看是CentOS6系统,果断决定用从来没玩过的LNMP.于是,百度.谷歌找教程,好多教程都 ...

  2. SVN版本控制与Visual Studio 2012的完美结合

    今天电脑重装了,所以vs,sqlserver,svn都得重装,因为我的公司目前使用的版本控制工具是svn.vs和sqlserver的安装均正常没有出现问题,但是在装svn的时候出了一点小插曲!svn下 ...

  3. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  4. python之---类和实例

    类和实例: 面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但 ...

  5. VC禁止在任务管理器中结束本进程

    转自百度空间:http://hi.baidu.com/175943462/item/657905e13b73b70b8d3ea8bb 一提到进程保护特别是在Windows下,没有最安全,只有更安全.下 ...

  6. PorterDuff及Xfermode初识

    图像合成,是将两幅退昂放在一起的动作,它使得我们能够同时看到两幅图像的特征. 我们可以首先在Canvas对象上绘制一个位图对象,然后再相同的Canvas对象上绘制第二个位图对象的方式来实现合成.不过这 ...

  7. IBinder类的中文翻译

    远程对象的基础接口,是一个为了在执行进程中和进程间调用时的高性能,而设计的轻量级远程调用机制的核心部分.这个接口描述了和远程对象交互的抽象协议.不要直接实现这个接口,而是通过继承Binder来实现. ...

  8. BZOJ3132: 上帝造题的七分钟

    3132: 上帝造题的七分钟 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 483  Solved: 222[Submit][Status] Desc ...

  9. ♫【CSS】命名颜色

    color: aqua; 每个浏览器都支持一套它能识别且能正确渲染的命名颜色.这些颜色包括: aqua 浅绿色 #00ffffblack 黑色 #000000blue 蓝色 #0000fffuchsi ...

  10. Ignatius and the Princess IV

    Ignatius and the Princess IV Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32767 K ( ...