shell脚本语法上的注意事项
字符串和引号
shell中字符串可以用单引号,也可以用双引号包裹;但含义有所不同
使用单引号包裹的字符串,含义是所见即所得;即默认对串中特殊字符进行转义
# 例如,不会对变量进行引用
var=520
echo 'value of var: $var'
可以看到$var并没有被解释为变量

而如果使用双引号,则会将$var解释为对变量的引用
echo "value of var: $var"

在if中判空
在if语句中判断字符串是否为空时,需要给变量加上双引号!!!
在下面脚本中,变量target设置了一个默认值,为了提供灵活性,想要在脚本传入参数时,将第一个参数的值赋给target;当没有参数时,就不赋值。所以需要判断$1是否为空
target="hello shell"
if [ -n $1 ]; then
echo "target change"
target=$1
fi
结果出人意料,不管是否给脚本传递参数,if的判断都为真了!!!要想避免这种情况,就要给$1加上双引号!

if [ -n "$1" ]
可以看到,现在不传入参数的话,target就不会被赋值了

函数的定义
脚本中定义的函数被加载到当前的shell环境中,并可在加载之后的任意地方被调用
function func-name {} # 空格!!!否则报错
可以看到,若没有空格,或不是新行,shell会直接执行函数定义中的语句

报错信息
有时候编辑器和运行时的报错信息,并不能准确的告知出错位置
例如下面代码,少了个反引号,却是函数的左括号报错


浙公网安备 33010602011771号