shell中关于if判断十分重要,Bash能够执行各种测试,可以使用 if 、if else 以及逻辑运算符来测试,用比较运算符来比较数据项。除此之外,还有一个test指令也可以用于测试。

if 的用法

if 条件

if condition;
thencommands;
fi

else if 和 else

if condition;
thencommands;
else if condition;
thencommands;
elsecommands;
fi

if 和 else 语句能够嵌套使用,if 的条件部分可能变得很长,但是可以使用逻辑运算符将它变得简洁一些:

[ condition ]  && action;  # 如果condition 为真,则执行action

[ condition ]  && action;  # 如果condition为假,则执行action

&& 是逻辑与运算,|| 是逻辑或运算。

算术比较

比较条件通常被房子在封闭的中括号(或者是方括号)内,一定要注意在 [或] 与操作数之间有一个空格。如果忘记了这个空格,shell脚本就会报错。

[$var -eq 0 ] or [ $var -eq 0]    注意这里是少了空格,会报错的

对变量或值进行算术条件比较大小

[ $var -eq 0 ]  # 当$var 等于0时,返回真[ $var -ne 0 ]   # 当 $var 不为0时,返回真 

其他重要的操作符

-gt  #大于    相当于 >

-lt  #小于     相当于 <

-ge  #大于或等于  相当于 >=

-le  #小于或等于  相当于 <=

-a 是逻辑与操作,and的意思

-o 是逻辑或的操作,or的意思

[ $var1 -ne 0 -a $var2 -gt 2 ]  #使用逻辑与  -a

[ $var1 -ne 0 -o $var2 -gt 2 ]  #使用逻辑或  -o

文件系统相关判断

[ -f  $file_var ]: 如果给定的变量,包含正常的文件路径,或者文件名,则返回真

[ -d $var ]:如果给定的变量包含目录,则返回真,文件目录存在即为真

[ -e $var ]:如果给定的变量包含的文件存在,则返回真,文件存在即为真

[ -c $var ]:如果给定的变量包含的是一个文件字符设备文件的路径,则返回真

[ -b $var ]:如果给定的变量包含的是一个块设备文件的路径,则返回真

[ -w $var ]:如果给定的变量包含的文件可写,则返回真,也就是说文件具有可写权限

[ -r $var ]:如果给定的变量包含的文件可读,则返回真,也就是说文件具有可读权限

[ -x $var ]: 如果给定的变量包含的文件可执行,返回真,也就是说文件具有可执行的权限

[ -L $var ]:如果给定的变量包含的是一个符号链接,则返回真,也就是说,文件是一个链接文件

考虑下面的例子:

fpath="/etc/passwd"
if [[ -e $fpath ]];
thenecho "File exists"
elseecho "Dose not exists"
fi

字符串比较

进行字符串比较是,最好用双中括号(或者双方括号),因为有时采用单个中括号会产生错误

注意,双中括号是Bash的一个扩展特性。如果出于性能考虑,使用ash或者dash来运行脚本,那么将无法使用该特性

比较两个字符串是否相同

[[ $str1 = $str2 ]] : 当str1等于str2时,返回真。也就是说,str1与str2包含的文本是一模一样的

注意:在=前后各有一个空格,如果没有空格,那就不是比较关系了,就变成了赋值语句了。

[[ $str1 == $str2 ]] :这是检查字符串是否相同的另一种写法

[[ $str1 != $str2 ]] : 如果str1与str2不相同,返回真

找出在字母表中靠后的字符串

字符串是一句字符的ASCII码值进行比较的,例如 A 的值是0x41,a 的值是0x61。因此 A 小于 a , AAa 小于 Aaa。

[[ $str1 > $str2 ]]  :如果str1的字母序比str2大,则返回真

[[ $str1 < $str2 ]]  :如果str1的字母序比str2小,则返回真

判断字符串是否为空

[[ -z $str ]] : 如果str为空串,则返回真

[[ -n $str ]] :如果str不为空,则返回真

使用逻辑运算符&& 和 || 能够很容易将多个判断条件组合起来:

if [[ -n $str1 ]] && [[ -z $str2 ]];
thencommands;
fi

举例:

str1="Not empty"
str2=""if [[ -n $str1 ]] && [[ -z $str2 ]];
thenecho str1 is nonempty, str2 is empty string
fi

输出如下:

str1 is nonempty, str2 is empty string

另外:

test命令也可以用来判断,用test可以避免使用过多的括号,增强代码的可读性。之前讲过的 [  ] 中的测试条件同样可以用于test命令,例如:

if [ $var -eq 0 ]; then echo "True"; fi

也可以写成:

if test $var -eq 0; then echo "True"; fi

说明:test 是一个外部程序,需要衍生出对应的进程,而Bash是一个内部函数,因此Bash的执行效率更高。test兼容于 Bourne shell,ash,dash等。

shell if 对字符串的判断相关推荐

  1. shell 脚本比较字符串相等_shell字符串比较判断是否为数字

    shell字符串比较判断是否为数字 更新时间:2013年01月23日 17:39:14   作者: 本文阐述:shell中整数比较方法及字符串的比较方法,如等于,不等于,大于,大于等于,小于,等等 二 ...

  2. (38)Shell脚本【字符串运算:相等判断】

    (38)Shell脚本[字符串运算:相等判断] 1 目录 1.1 Shell脚本简介 1.2 Shell脚本文件 1.3 Shell脚本作用 1.4 Shell运行环境 1.5 Shell脚本[字符串 ...

  3. shell中(字符串截取)

    cut是以每一行为一个处理对象的,这种机制和sed是一样的.(关于sed的入门文章将在近期发布) 2 cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢? cut命令主要是接 ...

  4. linux shell脚本中 if 条件判断

    转载 https://blog.csdn.net/zhan570556752/article/details/80399154 "||"和"&&" ...

  5. 总结:shell中的if条件判断

    一.if 的基本语法 if [ command ];thenxxx elif [ command ];thenxxx elsexxx fi 二.常见的一些写法案例 1.if [ "x${va ...

  6. 判断字符串_python判断字符串以什么开始

    简介 Python在处理文本的时候经常需要判断以什么字符串开头,可以取字符串索引进行判断,也可以直接使用startswith函数进行判断. 取索引字符串判断 str="人生苦短,我用Pyth ...

  7. 用shell将时间字符串与时间戳互转

    http://www.codelast.com/?p=775 在shell中,字符串转换为时间戳可以这样做: 1 date -d "2010-10-18 00:00:00" +%s ...

  8. Shell脚本中字符串的一些常用操作

    Shell脚本中字符串的一些常用操作 字符串长度 ${#string}可以获得${string}的长度 例子: string='How are you' echo ${#string} # 输出结果为 ...

  9. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

最新文章

  1. 【实用快捷键】设置WebStorm中Show in Explorer(在资源管理器中打开)快捷键Alt+Shift+R(类似VSCode)
  2. Photoshop2018详细安装教程
  3. JAVA运算符\操作符
  4. python运维开发之第八天(socket)
  5. Android编程之Intent源码详解
  6. STL标准模版库--vector的操作集合
  7. IT桔子2013年度中国互联网创业投资盘点(简版): 群雄逐鹿中,你还在这里坚持
  8. 扫雷——Windows上的经典小游戏
  9. python 常微分方程_关于常微分方程(ODE)和优化,在Python中
  10. HashSet模拟新浪微博用户注册
  11. php faker,laravel使用Faker数据填充的实现方法
  12. 少有人知的 Python “重试机制“:tenacity
  13. android 5.1 壁纸路径,Android5.1 壁纸来源选项中有两个“壁纸”选项
  14. AD学习笔记(一)基础认识
  15. 弹性和瞬态故障处理库Polly之重试策略
  16. 环状二肽,82863-65-8,cyclo(Leu-Tyr)
  17. 未报价快递损毁如何处理(网上信息整理)
  18. 华为p20pro快捷计算机,华为P20/P20 Pro秒变电脑,只需一条绿联Type C连接线
  19. 2021.5.22 2022蓝桥杯练习赛3
  20. 优化版GM后台包站系统+码支付/代理/84个GM游戏

热门文章

  1. lnmp运行php原理,lnmp安装管理运行
  2. DL-Paper精读:Training SDNNs with IHT
  3. 如何运用计算机巧记英语词汇,如何运用计算机巧记英语单词_记英语单词的技巧...
  4. 软件本地化可能会用到的工具
  5. Inno Setup 安装制作应用
  6. WIN2K3WINXP系统服务详解
  7. Ubuntu 13.04 系统管理初探
  8. Elasticsearch 查询超出10000条时
  9. openwrt的openclash提示【更新失败,请确认设备闪存空间足够后再试】
  10. 人体红外传感器+继电器