shell 脚本调试技巧

本文总结了提高shell脚本调试效率的方法,包括利用命令参数检查语法错误,使用here document展示脚本说明,用内置命令获取字符串和数组长度,设置DEBUG标志输出调试信息,以及用tput实现彩色echo输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近写了一些简单的 shell 脚本,采用逐行检测的方式调试,效率实在是太低了。在看书和网上查资料的时候,找到了一些比较高效的调试技巧,在此做一个总结。

1. sh 命令参数

script 在执行前最怕的就是出现语法错误,对此我们可以通过 sh 的相关参数进行判断。

$ sh [-nvx] scripts.sh
参数:
-n : 不要执行 script, 仅查询语法问题
-v :在执行前,先将 script 的内容输出到屏幕上
-x : 将使用到的 script 内容显示到屏幕上,非常有用的参数!

sh -x的方式可以将命令执行过程也显示出来,如此我们可以判断脚本代码执行到哪一段时会出现相关的信息!通过显示完整的命令串,就能够根据输出的错误信息来修改我们的脚本了。

2. 显示脚本的使用说明

在我们开始写Shell脚本的初期,常会使用 echo 命令显示脚本的使用说明。 但当说明的文字较多时,echo 语句就会变得一团糟。随后我发现,可以使用 cat命令来显示使用说明。

cat << EOF

Usage: myscript <command> <arguments>

VERSION: 1.0

Available Commands

    install - Install package

    uninstall - Uninstall package

    update - Update package

    list - List packages

EOF

这里的 << 称为 here document,它可以将字符串放置在两个 EOF 之间。

3. 检查字符串活数组的长度

我曾经在面试一家游戏公司中被总监问到这个问题,,,

if [ ${#authy_api_key} != 32 ]; then
  red "you have entered a wrong API key"
  return $FAIL
fi

${#VARIABLE_NAME} 可以给出字符串的长度

length=${#array_name[@]} 或者 length=${#array_name[*]} 则可以获得数组的长度

更多内容参考 http://c.biancheng.net/cpp/view/7002.html

4. 设置 debug 信息

仅当设置DEBUG标志时才打印调试信息

function debug() { ((DEBUG)) && echo ">>> $*"; }
function debug() { [ "$DEBUG" ] && echo ">>> $*"; }

5. 让你的echo丰富多彩

很多时候,你会想让echo能以多种颜色区分不同输出。比如,绿色表示成功,红色告知失败,黄色提示警告。

NORMAL=$(tput sgr0)
GREEN=$(tput setaf 2; tput bold)
YELLOW=$(tput setaf 3)
RED=$(tput setaf 1)

function red() {
    echo -e "$RED$*$NORMAL"
}

function green() {
    echo -e "$GREEN$*$NORMAL"
}

function yellow() {
    echo -e "$YELLOW$*$NORMAL"
}

# To print success
green "Task has been completed"

# To print error
red "The configuration file does not exist"

# To print warning
yellow "You have to use higher version."

这里使用 tput 来配置输出颜色,输出文本,最后再恢复默认输出颜色。如果想对 tpu 了解更多,参看 prompt-color-using-tput

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值