shell脚本中诡异的if语句

语言用多了后,在不同的语言环境中来回切换难免会出错,特别是shell语法用着用时会蛋疼。便于以后查询,先趟坑。生产环境CentOS6.X_64。

if语句,if语句得满足那些条件才不报错:

1、中括号和表达式之间必须得有一个空格;

2、if和中括号之间必须得有一个空格;

3、语句块以if开始必须得以fi结束。

#!/bin/bash
if [ 1 == 1 ];then
echo 'hello'
fi

带一个分支的if语句,注意if里面的表达式就好,shell脚本对缩进没有要求,为了保持代码的整洁用缩进比较好。

#!/bin/bash
if [ 1 == 0 ];then
    echo 'hello'
else
    echo 'world'
fi

带多个分支的if语句,注意是elif不是else if,else if 会造成整个语句块错误。elif中的表达式规则同if

#!/bin/bash
if [ 1 == 0 ];then
    echo 'hello'
elif [ 1==1 ];then
    echo 'world'
else
   echo '!'
fi

if语句条件表达式支持 || 、&&等

if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then #注意空格,有严格的语法限制
if [ "$testing" != "" ]; then
if [ "$date_d" == "" ]; then
if [ "$date_total_s" -lt "0" ]; then

if语句可以对文件、数字、字符串进行判断,更详细的condition可以参看文章《shell 循环语句和字段分隔符》

#文件
if [ -d /etc ]
# -e filename 如果 filename存在,则为真
# -d filename 如果 filename为目录,则为真
# -f filename 如果 filename为常规文件,则为真
# -L filename 如果 filename为符号链接,则为真
# -r filename 如果 filename可读,则为真
# -w filename 如果 filename可写,则为真
# -x filename 如果 filename可执行,则为真
# -s filename 如果文件长度不为0,则为真
# -h filename 如果文件是软链接,则为真
# filename1 -nt filename2 如果 filename1比 filename2新,则为真。
# filename1 -ot filename2 如果 filename1比 filename2旧,则为真。

#数字:
# ==     !=     >     >=     <     <=     !
# -eq     -ne     -gt     -ge     -lt     -le       取非

#字符串:
#-Z     -n
#为空     不为空
if [ $STR -n " " ];then

转载请注明出处:http://www.xiaomastack.com/2014/07/27/shellscriptcy/ 谢谢!

发表评论:

你的电子邮件地址将不会被公开.

× 6 = 30