linux bash编程与脚本应用实战(bash 执行shell命令)

编译自:https://www.cyberciti.biz/tips/debugging-shell-script.html作者:Vivek Gite
译者:zjon
从我的邮箱:
我写了一个小小的hello world脚本。如何调试运行在Linux或类UNIX系统上的bash shell脚本?
这是Linux/Unix系统管理员或新用户最常问的问题。脚本调试可能是一项乏味的工作(不容易阅读)。有许多方法可以调试shell脚本。
您需要传递-x或-v参数来浏览bash shell中的每一行代码。
如何在Linux或UNIX下调试Bash Shell脚本
让我们看看如何使用各种方法调试运行在Linux和UNIX上的脚本。
-x选项调试脚本使用-x选项运行脚本:
$ bash-x script-name $ bash-x domains . sh
使用set内置命令bash shell提供调试选项,可以打开或关闭set命令的使用[1]:
Set -x :在执行时显示命令及其参数。
Set -v :显示shell输入行。
您可以在shell脚本本身中使用以上两个命令:
#!/bin/bash清除
#打开调试模式
set -x
对于f in *

文件$f
完成的
#关闭调试模式
集合x
限位开关(Limit Switch)
#更多命令
您可以更换标准配套[2]线:
#!/bin/bash,包含以下代码(用于调试):
#!/bin/bash -xv使用智能调试函数首先添加一个名为_DEBUG的特殊变量。当您需要调试脚本时,请将_DEBUG设置为on:
_DEBUG=\’on\ ‘将以下函数放在脚本的开头:
函数调试(){
[ \’$_DEBUG\’==\’on\’ ] $@
}
现在,每当您需要调试时,只需使用如下调试功能:
调试\ ‘文件是$ filename \ ‘或:
调试集-x Cmd1
Cmd2
调试集x
当调试完成时(在将脚本移动到生产环境之前),将_DEBUG设置为off。没有必要删除调试行。
_DEBUG=\’off\’ #设置为除’ on ‘以外的任何字符示例脚本:
#!/bin/bash _DEBUG=\’on\ ‘
函数调试()
{
[ \’$_DEBUG\’==\’on\’ ] $@
}
调试回显’读取文件’
因为我在*

grep ‘something’ $i /dev/null
[ $ -eq 0 ] echo \ ‘在$i文件中找到\ ‘
完成的
调试集-x
a=2
b=3
c=$(( $a $b))
调试集x
echo \’$a $b=$c\ ‘
保存并关闭文件。按如下方式运行脚本:
$ ./script.sh输出:
正在读取xyz.txt文件中的文件
a=2
b=3
c=5
调试集x
[‘ on==on ‘]’
集合x
2 3=5
现在将_DEBUG设置为off(您需要编辑这个文件):
_DEBUG=\’off\ ‘运行脚本:
$ ./script.sh输出:
在xyz.txt文件中找到2 3=5
以上是一个简单但非常有效的技巧。您也可以尝试使用DEBUG作为别名,而不是函数。
调试Bash Shell Bash或sh或ksh时的常见错误会在屏幕上给出各种错误消息。在许多情况下,错误消息可能不会提供详细信息。
跳过对文件应用执行权限当您编写第一个hello world脚本[3]时,您可能会得到如下错误:
Bash:/hello . sh 3360权限被拒绝请使用chmod命令3360设置权限
$ chmod x hello.sh $。/hello.sh
$ bash hello.sh
文件结尾出现意外错误。如果您收到关于文件结尾的意外错误消息,请打开脚本文件并确保它有左引号和右引号。在此示例中,echo语句有一个左引号,但没有右引号:
#!/bin/bash.
.
“echo”错误:找不到文件
^^^^^^^
缺少报价
还要确保检查丢失的括号和大括号{}:
#!/bin/bash.
[ !-d $ DIRNAME]{ echo \ ‘ error : ch root dir找不到\ ‘;出口1;
^^^^^^^^^^^^^
缺少大括号}
.
像fi,esac,等关键词。如果你在结尾遗漏了关键词,比如fi或者;你会得到一个错误,比如“XXX意外”。因此,请确保所有嵌套的if和case语句都以适当的关键字结尾。关于语法要求的页面。在本例中,fi缺失:
#!/bin/bash echo \ ‘开始.\’
.
如果[ $1 -eq 10 ]
然后
如果[ $2 -eq 100 ]
然后
echo \ ‘做点什么\ ‘
船方不负担装货费用
对于$files中的f

回声$f
完成的
#注意fi丢失了
在Windows或UNIX框中移动或编辑shell脚本。不要在Linux上创建脚本并将其移动到Windows。另一个问题是在Windows 10上编辑shell脚本,并将其移动到UNIX服务器上。由于换行符不同,这将导致命令无法找到错误。您可以使用以下命令将DOS换行符转换为Unix/Linux格式的CR-LF [4]:
Dos2unix my-script.sh提示Tip 1-将调试信息发送到标准错误[标准错误]是默认的错误输出设备,用于写入所有系统错误信息。因此,最好将消息发送到默认的错误设备:
#向标准输出回显写入错误\ ‘错误: $1找不到文件\ ‘
#
#将错误写入标准错误(注意12位于echo命令的末尾)
#
echo \ ‘错误:找不到1文件\’ 12
2-使用vim文本编辑器时打开语法高亮显示。大多数现代文本编辑器允许设置语法高亮选项。这对于检查语法和防止常见错误(如左引号或右引号)非常有用。你可以看到不同的颜色。这个特性简化了shell脚本结构中的编写,语法错误在视觉上有很大的不同。突出显示并不影响文字本身的意思,只是给你一个提示。在这个例子中,我的脚本使用vim语法高亮显示:
!如何调试Bash Shell脚本,使用Vim语法突出Linux或UNIX中的特性[5]]7[6]
3-用shellcheck检查脚本shellcheck是一个对shell脚本进行静态分析的工具[7]。您可以使用它来查找shell脚本中的错误。这是用Haskell写的。您可以使用此工具来查找警告和建议。您可以看到如何在Linux或类UNIX系统上安装和使用shellcheck来改进您的shell脚本,避免错误并提高效率。
作者:Vivek Gite
作者是nixCraft的创建者,是一位经验丰富的系统管理员,也是一位练习Linux操作系统/UNIX shell脚本的教练。他曾与全球客户和各种行业合作,包括IT、教育、国防和空间研究以及非营利部门。关注他的推特[8],脸书[9],谷歌[10]。
https://www.cyberciti.biz/tips/debugging-shell-script.html via :号
作者:Vivek Gite[11]译者:zjon校对:wxy
本文最初由LCTT编辑,Linux中国很荣幸地发布了它。
点击“了解更多”访问文本中的链接。

其他教程

手机常用故障解决方法(手机有哪些故障)

2022-8-21 5:27:48

其他教程

“App”读作“er ass' a-p-p '”还是“April/p/”?

2022-8-21 5:29:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索