shellif,shellife
Shell 中 if 语句的使用
Shell 的 if 语法 和 C 语言等高级语言非常相似,唯一需要注意的地方就是 Shell 的 if 语句对 空格 方面的要求比较严格( 其实 Shell 对所有语法的空格使用都比较严格 ),如果在需要空格的地方没有打上空格,都会报错。如: if [ $1 == "ip" ];then echo "abc"; fi 中少了一个空格都会报错。另外 Shell 的 if 语句必须以 fi 作为结尾,不然同样会报错。
有 else 和 elif 时也一样,需要注意空格问题,下面这个例子可以作为参考
介绍完 if 语句的基本语法后,if 还有一个值得我们注意的地方,那就是"对比"。在 C 语言等高级语言中,不管是对比字符串,还是对比整型、浮点数等等数据类型,都是使用 ==、= 等等对比运算符就可以完成。但是在 Shell 中对比字符串和对比数字,却是要分开两种方式。
对比字符串只能使用 ==、、、!=、-z、-n 。对比字符串时,末尾一定要加上 x(或者a、b等)一个字符,因为 if [ 1 是"",这个语句会翻译成 if [ == "ab" ] ,左边相当于没有东西了,会报语法错误。或者使用 [[ ]] ,就不需要 x 了。使用 或者 时,如果是用 [ ],需要用转义符 "",如 。
对比数字既能使用 -eq、-ne、-gt、-lt、-le ,也能使用 ==、、、!= 。其中 -eq 的意思是 equal,-ne 是 unequal,-gt 是 greater than,-ge 是 greater than or equal to,-lt 是 less than,-le 是 less than or equal to 。
if 在对比时可以使用正则表达式,如: if [[ $1 == a*a ]] (或者 if [ $1x == a*ax) 。如果使用 "" 把 a a 包围起来, 就会变成字符 * ,而不是正则表达式的 *。
区别一:
在 [ 中使用逻辑运算符,需要使用 -a(and)或者 -o(or)。
在 [[ 中使用逻辑运算符,需要使用 或者 ||。
区别二:
[ 是 Shell 命令,它包围的表达式是它的命令行参数,所以字符串比较符 和 需要转义,否则就变成 io 重定向了。
[[ 是 Shell 关键字,不会做命令扩展,所以 和 不需要进行转义。但是语法相对严格,如在 [ 中可以用引号括起操作符,[[ 则不行。如: if [ "-z" "ab" ] 。
区别三:
[[ 可以做算术扩展,[ 则不行。如:```if [[ 11 + 1 -eq 100 ]]''',而 '''if [ 11 + 1 -eq 100 ]''' 则会报错。
在高级语言中,判断文件是否存在等各种状态都是需要调用特定的函数进行判断。而在 Shell 中,这方面就比较方便些,只需要运算符即可。
常用的文件判断运算符如下:
原文:
Shell脚本中的if和case逻辑判断
在shell脚本中,if逻辑判断的基本语法为:
例如:
需要注意的是shell的判断语句也有特殊的格式,例如(($a60)),必须有两层括号。此外还可以使用[]的形式,但是不能用、这些关系运算符了,使用[]的对应符号如下(注意'['的右边和']'的左边时必须留出空格):
Shell脚本中还经常用if来判断文档的属性,具体格式为:
参数-e是判断文件是否存在的,其他常用参数如下:
使用case的语法为:
case结构不限制value的个数,*代表所有其他值。下面是一个示例脚本,用来判断奇数还是偶数:
参考: 跟阿铭学Linux(第2版)
shell中IF的用法介绍
一、语法结构
二、说明
(1)[ condition ] (注意condition前后要有空格)
非空返回true,可使用$?验证(0为true,1为false) 如:[ hadoop ] 返回true
空返回false 如:[ ] 返回false
(2)[ condition ] echo OK ||echo notok 可以多条件,条件满足,执行后面的语句
三、整数比较
四、字符串比较
五、权限判断
六、文件系统类型判断
实例1 特权用户的高内存占用查询
案例2 远程登录的用户的详情查询
.....
shell if函数中几种条件判断的区别
1、整数比较:
[plain] view plain copy
-eq 等于,如:if [ "$a" -eq "$b" ] 或 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" ]
== 等于,如:if if (("$a" == "$b"))
小于(需要双括号),如:(("$a" "$b"))
= 小于等于(需要双括号),如:(("$a" = "$b"))
大于(需要双括号),如:(("$a" "$b"))
= 大于等于(需要双括号),如:(("$a" = "$b"))
特别说明的是(())字符和括号之间不需要留空格,但[[ ]],[]要求比较严格,需要留空格。
2、字符串比较,上面的-eq,-nq等公式只适用于数字比较,不适用于字符比较
[plain] view plain copy
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ],与=等价
[[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
[[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
[ $a == z* ] # File globbing 和word splitting将会发生
[ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
3、括号之间的区别:
[[ ]],[]对括号内变量要求严格且且敏感,但(())则相对宽松一些
[plain] view plain copy
1、if [[ $a == $b ]] 和 if [[ $a == $b ]] 等价
但if [[ $a == $b ]] 和if [[ a == b ]] 不等价
2、if (($a == $b)) 和 if (($a = $b))等价
if (($a == $b)) 和 if ((a == b)) 等价
4、多条件判断:
和||适用于[[ ]]和(),-a和-o适用于[]中
举例如下:
[plain] view plain copy
if ((i == 1)) 和 if [ "$i" == 1 ]等价
if [[ "$i" = 1 "$j" = 2 ]] 和 if ((i = 1)) || ((j = 2))
5、其它说明:
!= 不等于,如:if [ "$a" != "$b" ]
这个操作符将在[[]]结构中使用模式匹配.
小于,在ASCII字母顺序下.如:
if [[ "$a" "$b" ]]
if [ "$a" \ "$b" ]
注意:在[]结构中""需要被转义.
大于,在ASCII字母顺序下.如:
if [[ "$a" "$b" ]]
if [ "$a" \ "$b" ]
shell 脚本 if 判断多个条件
1.如果ab且ac
2.如果ab或ac
4."||"和""在SHELL里可以用吗?也就是第一个写成if [ ab ac ]也可以吗?
可用, 但是要两个独立的 [ ] , [[ ]] 或 (( )) 看 1
5 -ne 比较数字 (numberic) ; != 比较字符 (string), 但后者拿来
比较数字也可,只是不是标准用法
-lt 是等同 , 但 只能在 shell 的数值操作符 (( )) 或
者 逻缉操作符 [[ ]] 才可使用, -lt , -eq , -gt , -ge
-le , 这些是 test , 就是 [ ] 这个内建命令使用的条件操
作符, 数字用, = , != 字符用, == 这个该是 [[ ]] 用的,
可用来比对正规表示式, 但用在 [ ] 也可,只是不太正统用法
shell脚本中的if中多条件语句如何写。
可以使用 if-elif-else 语法来写多条件语句。
1、首先要理解if-else的基本用法,if条件+then操作+else操作+fi闭合,书写方法如下:
2、if -elif-else 语法的具体格式--if单条件多分支,书写方法如下:
3、实例 - if单条件多分支,这个实例的输出结果是:a 小于 b。
4、实例 - if多条件多分支,这个实例输出结果是:a 等于 b,或 a小于10。
扩展资料
1、shell语法注意事项
shell的if语法和C语言等高级语言非常相似,唯一需要注意的地方就是shell的if语句对空格方面的要求比较严格,如果在需要空格的地方没有打上空格,就会报错。
如if [ 1 == 1 ];then echo "abc";fi中如果在少写了if后面的空格就报错:
2、 shell语法中[[ ]]和[ ]的主要区别
(1) [ ] 实际上是bash 中 test 命令的简写。即所有的 [ expr ] 等于 test expr。
对 test 命令来说, 用 -eq 要进行数字比较,而你此时传入字符串,就报错了。
(2) [[ ]] 是内置在shell中的一个命令,它比test强大的多。支持字符串的模式匹配(使用=~操作符时甚至支持shell的正则表达式)。逻辑组合可以不使用test的-a,-o而使用 ||。