调试在编程过程是一种非常很常见的,它能让程序员逐行检查代码,观察变量以及程序在执行过程中的行为,还能在程序执行的各个阶段检查其状态,从而帮助程序员更有效率地找出并修复错误。
本文将深入探讨如何调试Bash shell脚本的各种技巧
文章目录
shellcheck myscript.sh,ShellCheck就会列出脚本中的所有问题和建议的修复方法。sudo yum install shellchecksudo apt install shellchecksudo apt install shellcheckBash提供了一些选项,可以帮助你调试脚本,包括:
bash -n myscript.sh来检查脚本的语法。bash -v myscript.sh来查看脚本的每一步操作。bash -x myscript.sh来查看每行命令的扩展结果。bash -u myscript.sh来检查是否有未定义的变量。set +<option>命令在之后禁用它,以便只调试脚本的特定部分。例如: # 开启xtrace选项
set -x
# 这部分将会被跟踪
echo "Hello, world!"
# 关闭xtrace选项
set +x
# 这部分将不会被跟踪
echo "Goodbye, world!"bash -x myscript.sh来在运行脚本时启用xtrace选项。trap命令允许我们指定一个命令或一组命令在脚本中的每个语句之前重复执行。例如,你可以使用trap命令来在每个命令之前打印当前的时间:
trap 'echo "Current time: $(date)"' DEBUGstrace -p <pid>来跟踪一个正在运行的进程的系统调用。参考:https://github.com/bertvv/dotfiles/blob/main/.vim/templates/sh
#! /usr/bin/env bash
#
# Author: Bert Van Vreckem <[email protected]>
#
#/ Usage: SCRIPTNAME [OPTIONS]... [ARGUMENTS]...
#/
#/
#/ OPTIONS
#/ -h, --help
#/ Print this help message
#/
#/ EXAMPLES
#/
#{{{ Bash settings
# abort on nonzero exitstatus
set -o errexit
# abort on unbound variable
set -o nounset
# don't hide errors within pipes
set -o pipefail
#}}}
#{{{ Variables
IFS=$'\t\n' # Split on newlines and tabs (but not on spaces)
script_name=$(basename "${0}")
script_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
readonly script_name script_dir
#}}}
main() {
# check_args "${@}"
:
}
#{{{ Helper functions
#}}}
main "${@}"
# cursor: 33 del