您的位置:首页 > 运维架构 > Shell

对shell脚本里if语句的一点剖析

2014-02-09 21:34 369 查看
写过shell脚本的肯定写过这样一段:if[-d dir]
then
echo"success"
else
echo"failed"
fi
  凡是说到if的时候书里都会提到这么两条规则:
1、“[”的右边和“]”的左边必须有空格;
2、如果要把then和if放到同一行,就要加个分号,写成 if [-d /bin];then 这样的形式。  大多数的书都介绍到这里就为止了,我也一度死记硬了这两条规则,我还一直认为shell脚本没规律、记不住、太难写。其实不然,直到今天我才发现::~ $ which [
/usr/bin/[  原来“[”是个命令,和ls、rm一样是一个命令。经查,“[”命令和test命令的功能、用法都基本一样,在有的版本的linux中“[”就是test的一个链接。
  这就好解释了,[ -d 其实就是一个命令带一个参数,就像ls –a,命令和参数之间当然必须有空格。只不过“[”有一点特殊,它的最后一个参数必须是“]”,参数之间也必须有空格,这就很好解释第一条规则。then和if放到同一行,就要在“]”后加个分号来告诉“[”命令到此结束,不然就会把then当成最后一个参数了。
  好了,原来一切都是这么合情合理,shell脚本的设计者不会没事找事搞那么复杂,只是“[”这么奇怪的命令名不太能接受罢了。
  最后再多说一句,if后面可以跟各种语句,比如if echo “hello”也是合法的,判断的依据就是这条语句是否执行成功,当然了if后面跟着用&&或||连接的多条语句也是可以的。http://hi.baidu.com/roovent/item/87ec485efa0ad314aaf6d779
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: