单命令多行格式
当在Linux Shell脚本中单个命令过长时,可以使用多行格式来表达,这样具有较好的可读性。若运行脚本后出现输入命令参数错误的提示,需要注意多行格式的正确性。
单个命令以多行格式表示时,保证正确性需要注意的点:
- 除了最后一行外,每行的末尾需要以反斜杠字符:
\
为结束字符
- 行末尾的反斜杠字符之后不可以存在任何空白字符,如空格等
运行脚本的程序
需要注意运行Shell脚本时所使用的Shell程序,如bash,zsh,csh,dsh等,因为某些脚本语法互不兼容,如使用bash语法的脚本应由bash来执行。
当执行脚本时默认将使用脚本文件首行注释中指定的shell程序,如:
#!/usr/bin/bash
若指定的shell程序找不到,则会使用当前用户使用的默认shell程序,如环境变量
$SHELL
指向的shell程序。此外,还可以在运行脚本时指定所用的shell程序,如:
bash script.sh
脚本中执行脚本
当在脚本中使用命令嵌套执行脚本时,需要注意执行脚本的权限。如在脚本中使用字符串表示脚本名称及其参数,则可能出现无执行权限的问题,即使在外层脚本执行时使用了
sudo
命令。如脚本script.sh内有命令:bash -c "another.sh hello 2"
在执行script.sh时使用了
sudo
:sudo bash script.sh
但
sudo
未被传递给内部执行的another.sh脚本,可能出现无权限的问题。此时,可以在script.sh中使用如下形式来执行another.sh脚本:
bash -c another.sh hello 2
使用变量时字符串化
直接使用变量时的形式为:
$VAR_TEST
,当该变量是字符串且含有空格时,若使用bash来执行脚本,在某些语句中会报错:bash: [: too many arguments。所以这种情况下,在使用时需要将变量字符串化,即:"${VAR_TEST}"
对于字符串变量中含有特殊字符如
!
、@
、#
及$
等,也应该对该变量字符串化,可使用单引号:'${VAR_TEST}'
出错退出
默认情况下,使用bash等程序执行脚本时,若中间命令执行出现错误,并不会使整个脚本终止,而是会继续执行,此时,可以在脚本首行使用命令:
set -e
这样,只要有任何命令出错,脚本程序将终止执行