【转】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用来检查脚本的执行情况。