笔记:Shell脚本编写踩坑及经验总结
📔

笔记:Shell脚本编写踩坑及经验总结

Published
发布:2021-10-17
Last Updated
修改:2023-12-25

单命令多行格式

当在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
这样,只要有任何命令出错,脚本程序将终止执行