“Shell脚本容易写错的几个语法”的版本间的差异
来自Alex's wiki
(创建页面,内容为“<pre> 1. if [$1 == ""]; then fi 2处错误 []前后要加空格,前和后都要 $1是危险的,如果是空等于[ == "" ]; 有语法错误 正...”) |
(没有差异)
|
2016年9月10日 (六) 14:57的最后版本
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