Linux编写SHELL实用提示
2017-10-20 本文已影响0人
向杨垫下
SHELL实用技巧
当脚本失败时退出
有时某个命令失败,还会继续执行下去,可能最终导致逻辑错误。当执行出错,实用下面语句退出脚本:
# let script exit if command fails
set -o errexit
OR
set -e
实用未声明变量时,退出脚本
实用未声明变量,会导致逻辑错误。当使用未声明变量,使用下面语句退出当前脚本。
# let script exit if an unsed variable is used
set -o nounset
OR
set -u
使用双引号引用变量
引用变量时使用双引号,有助于防止分词(空格)和不必要的全局(识别和扩展通配符):
#!/bin/bash
#let script exit if a command fails
set -o errexit
#let script exit if an unsed variable is used
set -o nounset
names="Howtoing FOSSMint Linusay"
echo "Names with double quotes"
echo
for name in "$names"; do
echo "$name"
done
exit 0
使用脚本中的功能
始终记住,使用函数来模块化代码,并使脚本更易读和可重用:
function myfunc() {
command1;
command2;
}
使用=
进行字符串比较
val1="apple"
val2="banana"
if [ "$val1" = "$val2" ]
命令输出内容替换使用$(command)
命令替换,用其执行结果替换该命令,使用$(command)而不是反引号来进行命令替换
# Wrong
user=`echo "$UID"`
# Right
user=$(echo "$UID")
使用只读来声明静态变量
静态变量的值在脚本中不能被改变
readonly passwd_file="/etc/passwd"
readonly group_file="/etc/group"
使用大写名称为环境变量,小写为自定义变量
所有bash环境变量都以大写字母命名,因此使用小写字母命名自定义变量可以避免冲突
跟踪SHELL脚本中命令的执行
启用SHELL脚本的调试模式
启用脚本调试模式的调试选项:
-v
显示脚本中所有行,会激活详细模式-n
(简称NOEXEC
或execution
),读取所有命令,但不执行它们。此选项激活语法检查模式-x
(简称X跟踪或执行跟踪),告诉SHELL,显示正在执行的所有命令及参数。此选项启用SHELL跟踪模式。
使用SHELL的set内置命令启用调试:
使用set built-in命令调试shell脚本的给定部分,例如函数。这种机制很重要,因为它允许我们在shell脚本的任何段上激活调试。 我们可以打开下面的表单,其中选项是任何调试选项使用set命令调试模式:
options
表示上面的调试选项之一或组合
启用调试模式:
set -option
禁用调试模式:
set +option
如果在SHELL脚本中的不同段启用了几种调试模式,也可以用下述方式一次禁用所有调试模式:
set -
SHELL启用调试模式
启用详细调试模式
-v
调试选项,告诉SHELL显示所有行,阅读它们。
命令行用法:
bash -v script.sh
启用语法检查调试模式
-n
激活语法检查调试模式,指示SHELL读取所有命令,但不执行它们,仅检查使用的语法,如果检查出错误,在终端打印,否则不显示任何内容。
命令行用法:
bash -n script.sh
启用跟踪执行调试模式
-x
跟踪Shell脚本中命令的执行。这指示SHELL在终端上执行显示所有命令和参数。
命令行用法:
bash -x script.sh