【转】linux shell if 参数
http://www.cnblogs.com/image-eye/archive/2011/08/20/2147015.html
shell编程中使用到得if语句内判断参数
–b当file存在并且是块文件时返回真
-c当file存在并且是字符文件时返回真
-d当pathname存在并且是一个目录时返回真
-e当pathname指定的文件或目录存在时返回真
-f当file存在并且是正规文件时返回真
-g当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
-h当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
-k当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
-p当file存在并且是命令管道时返回为真
-r当由pathname指定的文件或目录存在并且可读时返回为真
-s当file存在文件大小大于0时返回真
-u当由pathname指定的文件或目录存在并且设置了SUID位时返回真
-w当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
-o当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
UNIXShell里面比较字符写法:
-eq等于
-ne不等于
-gt大于
-lt小于
-le小于等于
-ge大于等于
-z空串
=两个字符相等
!=两个字符不等
-n非空串
-------------------------------------------------------------------------
更为详细的说明:
运算符描述示例
文件比较运算符
-efilename如果filename存在,则为真[-e/var/log/syslog]
-dfilename如果filename为目录,则为真[-d/tmp/mydir]
-ffilename如果filename为常规文件,则为真[-f/usr/bin/grep]
-Lfilename如果filename为符号链接,则为真[-L/usr/bin/grep]
-rfilename如果filename可读,则为真[-r/var/log/syslog]
-wfilename如果filename可写,则为真[-w/var/mytmp.txt]
-xfilename如果filename可执行,则为真[-L/usr/bin/grep]
filename1-ntfilename2如果filename1比filename2新,则为真[/tmp/install/etc/services-nt/etc/services]
filename1-otfilename2如果filename1比filename2旧,则为真[/boot/bzImage-otarch/i386/boot/bzImage]
字符串比较运算符(请注意引号的使用,这是防止空格扰乱代码的好方法)
-zstring如果string长度为零,则为真[-z$myvar]
-nstring如果string长度非零,则为真[-n$myvar]
string1=string2如果string1与string2相同,则为真[$myvar=onetwothree]
string1!=string2如果string1与string2不同,则为真[$myvar!=onetwothree]
算术比较运算符
num1-eqnum2等于[3-eq$mynum]
num1-nenum2不等于[3-ne$mynum]
num1-ltnum2小于[3-lt$mynum]
num1-lenum2小于或等于[3-le$mynum]
num1-gtnum2大于[3-gt$mynum]
num1-genum2大于或等于[3-ge$mynum]
脚本示例:
#!/bin/bash
#Thisscriptprintsamessageaboutyourweightifyougiveityour
#weightinkilosandhightincentimeters.
if[!$#==2];then
echo"Usage:$0weight_in_kiloslength_in_centimeters"
exit
fi
weight="$1"
height="$2"
idealweight=$[$height-110]
if[$weight-le$idealweight];then
echo"Youshouldeatabitmorefat."
else
echo"Youshouldeatabitmorefruit."
fi
#weight.sh70150
Youshouldeatabitmorefruit.
#weight.sh7015033
Usage:./weight.shweight_in_kiloslength_in_centimeters
位置参数$1,$2,...,$N,$#代表了命令行的参数数量,$0代表了脚本的名字,
第一个参数代表$1,第二个参数代表$2,以此类推,参数数量的总数存在$#中,上面的例子显示了怎么改变脚本,如果参数少于或者多余2个来打印出一条消息。
执行,并查看情况。
#bash-xtijian.sh60170
+weight=60
+height=170
+idealweight=60
+'['60-le60']'
+echo'Youshouldeatabitmorefat.'
Youshouldeatabitmorefat.
其中-x用来检查脚本的执行情况。