|
|
51CTO旗下网站
|
|
挪动端

怎样在通博8888官网或许Unix下调试Bash Shell剧本

我怎样能调试运转在 通博8888官网 或许类 UNIX 的零碎上的 bash shell 剧本呢?这是 通博8888官网 / Unix 零碎办理员或新用户最常问的题目。shell 剧本调试能够是一项繁琐的任务(不容易阅读)。调试 shell 剧本有多种办法。

作者:Vivek Gite泉源:通博8888官网中国|2018-02-01 17:32

【51CTO技能沙龙】10月27日,让我们配合探究AI场景化使用完成之道

来自我的邮箱:

我写了一个 hello world 小剧本。我怎样能调试运转在 通博8888官网 或许类 UNIX 的零碎上的 bash shell 剧本呢?

这是 通博8888官网 / Unix 零碎办理员或新用户最常问的题目。shell 剧本调试能够是一项繁琐的任务(不容易阅读)。调试 shell 剧本有多种办法。

您需求通报 -x-v 参数,以在 bash shell 中阅读每行代码。

怎样在 通博8888官网 或许 UNIX 下调试 Bash Shell 剧本

怎样在 通博8888官网 或许 UNIX 下调试 Bash Shell 剧本

让我们看看怎样运用种种办法调试 通博8888官网 和 UNIX 上运转的剧本。

-x 选项来调试剧本

-x 选项来运转剧本:

  1. $ bash -x script-name
  2. $ bash -x domains.sh 

运用 set 内置下令

bash shell 提供调试选项,可以翻开或封闭运用 set 下令

  • set -x : 表现下令及其实行时的参数。
  • set -v : 表现 shell 输出行作为它们读取的

可以在 shell 剧本自身中运用下面的两个下令:

  1. #!/bin/bash
  2. clear
  3.  
  4. # turn on debug mode
  5. set -x
  6. for f in *
  7. do
  8. file $f
  9. done
  10. # turn OFF debug mode
  11. set +x
  12. ls
  13. # more commands

你可以替代 规范释伴 行:

  1. #!/bin/bash

用以下代码(用于调试):

  1. #!/bin/bash -xv 

运用智能调试功用

起首添加一个叫做 _DEBUG 的特别变量。当你需求调试剧本的时分,设置 _DEBUGon

  1. _DEBUG="on"

在剧本的扫尾安排以下函数:

  1. function DEBUG()
  2. {
  3. [ "$_DEBUG" == "on" ] && $@
  4. }

如今,只需你需求调试,只需运用 DEBUG 函数如下:

  1. DEBUG echo "File is $filename"

或许:

  1. DEBUG set -x
  2. Cmd1
  3. Cmd2
  4. DEBUG set +x

当调试完(在挪动你的剧本到消费情况之前)设置 _DEBUGoff。不需求删除调试行。

  1. _DEBUG="off" # 设置为非 'on' 的任何字符

示例剧本:

  1. #!/bin/bash
  2. _DEBUG="on"
  3. function DEBUG()
  4. {
  5. [ "$_DEBUG" == "on" ] && $@
  6. }
  7.  
  8. DEBUG echo 'Reading files'
  9. for i in *
  10. do
  11. grep 'something' $i > /dev/null
  12. [ $? -eq 0 ] && echo "Found in $i file"
  13. done
  14. DEBUG set -x
  15. a=2
  16. b=3
  17. c=$(( $a + $b ))
  18. DEBUG set +x
  19. echo "$a + $b = $c"

保管并封闭文件。运转剧本如下:

  1. $ ./script.sh

输入:

  1. Reading files
  2. Found in xyz.txt file
  3. + a=2
  4. + b=3
  5. + c=5
  6. + DEBUG set +x
  7. + '[' on == on ']'
  8. + set +x
  9. 2 + 3 = 5

如今设置 _DEBUGoff(你需求编辑该文件):

  1. _DEBUG="off"

运转剧本:

  1. $ ./script.sh

输入:

  1. Found in xyz.txt file
  2. 2 + 3 = 5

以上是一个复杂但十分无效的技能。还可以实验运用 DEBUG 作为又名而不是函数。

调试 Bash Shell 的罕见错误

Bash 或许 sh 或许 ksh 在屏幕上给出种种错误信息,在许多状况下,错误信息能够不提供细致的信息。

跳过在文件上使用实行权限

当你 编写你的第一个 hello world 剧本,您能够会失掉一个错误,如下所示:

  1. bash: ./hello.sh: Permission denied

设置权限运用 chmod 下令:

  1. $ chmod +x hello.sh
  2. $ ./hello.sh
  3. $ bash hello.sh 

文件完毕时发作不测的错误

假如您收到文件完毕不测错误音讯,请翻开剧本文件,并确保它有翻开和封闭引号。在这个例子中,echo 语句有一个扫尾引号,但没有完毕引号:

  1. #!/bin/bash
  2.  
  3. ...
  4. ....
  5.  
  6. echo 'Error: File not found
  7. ^^^^^^^
  8. missing quote

还要确保你反省短少的括号和大括号 {}

  1. #!/bin/bash
  2. .....
  3. [ ! -d $DIRNAME ] && { echo "Error: Chroot dir not found"; exit 1;
  4. ^^^^^^^^^^^^^
  5. missing brace }
  6. ... 

丧失像 fi,esac,;; 等要害字。

假如你短少了却尾的要害字,如 fi;; 你会失掉一个错误,如 “XXX 不测”。因而,确保一切嵌套的 ifcase 语句以得当的要害字完毕。有关语法要求的页面。在本例中,短少 fi

  1. #!/bin/bash
  2. echo "Starting..."
  3. ....
  4. if [ $1 -eq 10 ]
  5. then
  6. if [ $2 -eq 100 ]
  7. then
  8. echo "Do something"
  9. fi
  10.  
  11. for f in $files
  12. do
  13. echo $f
  14. done
  15.  
  16. # 留意 fi 丧失了 

在 通博8888 或 UNIX 框中挪动或编辑 shell 剧本

不要在 通博8888官网 上创立剧本并挪动到 通博8888。另一个题目是编辑 通博8888 10上的 shell 剧本并将其挪动到 UNIX 效劳器上。这将由于换行符差别而招致下令没有发明的错误。你可以运用下列下令 将 DOS 换行转换为 CR-LF 的Unix/通博8888官网 款式

  1. dos2unix my-script.sh 

本领 

本领 1 - 发送调试信息输入到规范错误

[规范错误] 是默许错误输入设置装备摆设,用于写一切零碎错误信息。因而,将音讯发送到默许的错误设置装备摆设是个好主见:

  1. # 写错误到规范输入
  2. echo "Error: $1 file not found"
  3. #
  4. # 写错误到规范错误(留意 1>&2 echo 下令末端)
  5. #
  6. echo "Error: $1 file not found" 1>&2 

本领 2 - 在运用 vim 文本编辑器时,翻开语法高亮

大少数古代文本编辑器容许设置语法高亮选项。这关于检测语法和避免罕见错误如翻开或封闭引号十分有效。你可以在差别的颜色中看到。这个特性简化了 shell 剧本构造中的编写,语法错误在视觉上一模一样。高亮不影响文本自身的意义,它只为你提示罢了。在这个例子中,我的剧本运用了 vim 语法高亮:

!怎样调试 Bash Shell 剧本,在 通博8888官网 或许 UNIX 运用 Vim 语法高亮特性]7

本领 3 - 运用 shellcheck 反省剧本

shellcheck 是一个用于静态剖析 shell 剧本的东西。可以运用它来查找 shell 剧本中的错误。这是用 Haskell 编写的。您可以运用这个东西找到正告和发起。你可以看看怎样在 通博8888官网 或 类UNIX 零碎上装置和运用 shellcheck 来改进你的 shell 剧本,防止错误和高效。

【编辑引荐】

  1. 迁徙到通博8888官网:图形操纵情况
  2. 怎样通晓通博8888官网上的文件搜刮
  3. 五把通博8888官网分区办理利器,你最喜好哪个?
  4. 怎样在通博8888官网上用Fail2Ban维护效劳器免受暴力打击
  5. 最全通博8888官网磁盘办理根底知识全汇总
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
各人都在看
猜你喜好

读 书 +更多

网管员必读—-网络平安

本书共10章,引见的内容包罗歹意软件(包罗病毒、木马和蠕虫等)的深度进攻办法,黑客的次要范例和进攻办法,企业网络内、内部网络防火墙系...

订阅51CTO邮刊

点击这里检查样刊

订阅51CTO邮刊