shell脚本语法上的注意事项

字符串和引号

shell中字符串可以用单引号,也可以用双引号包裹;但含义有所不同
使用单引号包裹的字符串,含义是所见即所得;即默认对串中特殊字符进行转义

#	例如,不会对变量进行引用
var=520
echo 'value of var: $var'

可以看到$var并没有被解释为变量
image
而如果使用双引号,则会将$var解释为对变量的引用

echo "value of var: $var"

image

在if中判空

在if语句中判断字符串是否为空时,需要给变量加上双引号!!!
在下面脚本中,变量target设置了一个默认值,为了提供灵活性,想要在脚本传入参数时,将第一个参数的值赋给target;当没有参数时,就不赋值。所以需要判断$1是否为空

target="hello shell"
if [ -n $1 ]; then
	echo "target change"
	target=$1
fi

结果出人意料,不管是否给脚本传递参数,if的判断都为真了!!!要想避免这种情况,就要给$1加上双引号!
image

if [ -n "$1" ]

可以看到,现在不传入参数的话,target就不会被赋值了
image

函数的定义

脚本中定义的函数被加载到当前的shell环境中,并可在加载之后的任意地方被调用

function func-name {}		#	空格!!!否则报错

可以看到,若没有空格,或不是新行,shell会直接执行函数定义中的语句
image

报错信息

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

posted @ 2024-04-26 22:28  lifeAddicted  阅读(13)  评论(0)    收藏  举报