Shell脚本容易写错的几个语法
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
1. if [$1 == ""]; then
fi
2处错误
[]前后要加空格,前和后都要
$1是危险的,如果是空等于[ == "" ]; 有语法错误
正确写法
if [ "$1" == "" ]; then
fi
2. a = 1
1处错误,shell变量定义=前后不能有空白
正确写法
a=1
3. a=`ls`或a=$("ls")
echo $a
错误,如果结果是多行,echo是有问题的,尤其配合while使用时
正确做法,加双引号
echo "$a"
4. grep "- data $abc" file
两处错误,字符串参数的第一个字母如果是-需要转义,$需要转义,grep是示例,问题不仅限于grep
正确 grep "\- data \$abc" file
5. 脚本参数转给命令
ls $1 错误,如果$1有空格,变成了两个参数,正确用法 ls "$1"
ls "$@" 错误 ,本意是传所有参数,这样变成了一个大参数,正确用法 ls $@
6. rm -f file cp -f file
错误,服务器一般会将这两个命令重定向为带-i参数,-f参数失效,卡住
正确用法 /bin/rm -f file /bin/cp -f file
7. 判断
if [ $? -eq 0 || $? -eq 1 ]; then
fi
if [ $? -eq 0]; || [ $? -eq 1 ]; then
fi
错误,成功第二种经常复制而来
正确做法每个条件独立一个[],只有最后一个需要;
if [ $? -eq 0] || [ $? -eq 1 ]; then
fi
8. 返回值判断
if [ $? -eq 0 ] || [ $? -eq 1 ]; then
fi
错误后在的$?已经不再是命令返回值,而是前一个判断的返回值,恒定为0
正确做法,先存起来
ret=$?
if [ $ret -eq 0 ] || [ $ret -eq 1 ]; then
fi
最后修改于2016年9月10日 (星期六) 14:57