shellif shell脚本中 if 判断时候-s是什么意思
其实shellif的问题并不复杂,但是又很多的朋友都不太了解shell脚本中 if 判断时候-s是什么意思,因此呢,今天小编就来为大家分享shellif的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!
shell脚本中 if 判断时候-s是什么意思
[-s FILE ]如果 FILE存在且大小不为0则为真。
其它说明:
[-a FILE ]如果 FILE存在则为真。
[-b FILE ]如果 FILE存在且是一个块特殊文件则为真。
[-c FILE ]如果 FILE存在且是一个字特殊文件则为真。
[-d FILE ]如果 FILE存在且是一个目录则为真。
[-e FILE ]如果 FILE存在则为真。
[-f FILE ]如果 FILE存在且是一个普通文件则为真。
[-g FILE ]如果 FILE存在且已经设置了SGID则为真。
[-h FILE ]如果 FILE存在且是一个符号连接则为真。
[-k FILE ]如果 FILE存在且已经设置了粘制位则为真。
[-p FILE ]如果 FILE存在且是一个名字管道(F如果O)则为真。
[-r FILE ]如果 FILE存在且是可读的则为真。
[-s FILE ]如果 FILE存在且大小不为0则为真。
[-t FD ]如果文件描述符 FD打开且指向一个终端则为真。
[-u FILE ]如果 FILE存在且设置了SUID(set user ID)则为真。
[-w FILE ]如果 FILE如果 FILE存在且是可写的则为真。
[-x FILE ]如果 FILE存在且是可执行的则为真。
[-O FILE ]如果 FILE存在且属有效用户ID则为真。
[-G FILE ]如果 FILE存在且属有效用户组则为真。
[-L FILE ]如果 FILE存在且是一个符号连接则为真。
[-N FILE ]如果 FILE存在 and has been mod如果ied since it was last read则为真。
[-S FILE ]如果 FILE存在且是一个套接字则为真。
[ FILE1-nt FILE2 ]如果 FILE1 has been changed more recently than FILE2, or如果 FILE1 exists and FILE2 does not则为真。
[ FILE1-ot FILE2 ]如果 FILE1比 FILE2要老,或者 FILE2存在且 FILE1不存在则为真。
[ FILE1-ef FILE2 ]如果 FILE1和 FILE2指向相同的设备和节点号则为真。
[-o OPTIONNAME ]如果 shell选项“OPTIONNAME”开启则为真。
[-z STRING ]“STRING”的长度为零则为真。字符串为空即NULL时为真。
[-n STRING ] or [ STRING ]“STRING”的长度为非零 non-zero则为真。加-n与不加-n结果相同。
shell if 参数
1) bash
a=3; b=2; c=4
if(( a> b))&&(( a< c))
或者
if [[$a>$b ]]&& [[$a<$c ]]
或者
if [$a-gt$b-a$a-lt$c ]
2) a=3; b=2; c=4
if(( a> b))||(( a< c))
或者
if [[$a>$b ]]|| [[$a<$c ]]
或者
if [$a-gt$b-o$a-lt$c ]
3)-o= or,-a= and,但我一向只用||或者&&
4)可用,但是要两个独立的 [ ], [[ ]]或(())
看 1)
5)-ne比较数字(numberic);!=比较字符(string),但后者拿来
比较数字也可,只是不是标准用法
-lt是等同<,但<只能在 shell的数值操作符(())或
者逻缉操作符 [[ ]]才可使用,-lt,-eq,-gt,-ge
-le,这些是 test,就是 [ ]这个内建命令使用的条件操
作符,数字用,=,!=字符用,==这个该是 [[ ]]用的,
可用来比对正规表示式,但用在 [ ]也可,只是不太正统用法
这可以吗?呵呵
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中多条件语句如何写。
可以使用 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而使用&&||。
好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!