Bash提供了大量的选项,可用于控制Bash脚本的行为。这篇文章研究了一些更有用的,解释了如何显示哪些选项是使用的,哪些不是。
退出时发生错误
如果你想要一个bash脚本退出就遇到一个error-any错误总您的脚本,您可以添加的设置- o errexit选择。如果脚本包含一个语法错误,试图读取一个文件,不存在,试图附加到文件当你没有权限这样做,或误用命令,脚本会突然结束。这是一个简单的例子:
# !/bin/bash设置- o errexit尾巴NoSuchFile echo - n”输入文本附加>“txt echo $ txt > > NoSuchFile阅读
尝试运行这个脚本,您将看到这个:
美元app2file尾巴:NoSuchFile:没有这样的文件或目录
因为NoSuchFile不存在,脚本将退出,提示文本附加到它永远不会运行。没有errexit设置,该脚本将在“没有这样的文件”后继续运行错误和收集任何文本输入提示符后,创建一个文件,并将文本添加到它。
跟踪一个bash脚本
使用xtrace选择,每一个命令运行一个脚本,该脚本将显示出来。这个选项特别有用,当你调试一个复杂的脚本。你可以简单地删除xtrace选择或评论,当你不再需要跟踪的命令。
# !/bin/bash设置- o xtrace天太阳星期一星期二结婚星期四星期五坐echo $一天睡眠2完成
这个脚本的输出将开始像如下所示。行开头+不会出现如果迹象xtrace选项没有被使用。
loop-days-of-week +美元一天太阳星期一星期二结婚星期四星期五坐+回声太阳太阳+睡眠2 +一天太阳星期一星期二结婚星期四星期五坐+回声Mon Mon +睡眠2 +一天太阳星期一星期二结婚星期四星期五坐+回声星期二星期二…
停在未绑定变量
脚本通常会忽略的变量没有定义。如果你使用nounset选项,如以下示例所示,他们将会退出,而不是继续运行。
美元猫NoSuchVar # !/bin/bash设置- o nounset echo $ 1 echo $ 2 $ $ NoSuchVar 1
1。/ NoSuchVar:第6行:$ 2:未绑定变量
使用短形式的选择
通常是更有用的设置选项在脚本中使用他们的全名,这使脚本更易于阅读,但是你可以选择使用他们的简写形式。例如,xtrace选项可以调用的命令设置- o xtrace正如前面所示的示例中。然而,它可以使用简单的命令集设置- x。许多bash选项这样的单个字符的名称,可以使用“设置- ?”格式。这些信息可以在bash手册页,但下面的列表应该使这一切变得更简单。
选择短形式= = = = = = = = = = = = = = = = allexport——braceexpand - b errexit - e errtrace - e functrace - t hashall - h histexpand - k - h关键字监控- m noclobber - c noexec - n noglob - f通知- b nounset - u onecmd物理- p - t特权- p详细- v xtrace - x
显示选项
生成一个可用的选项列表与bash和他们是否积极与否,你可以使用设置- o命令不带参数。我使用了设置- o |列命令在命令行生成以下输出和调整它轻轻列排队所以很容易阅读,因为列对齐扔下了一个冗长的选项名称(interactive-comments)。
allexport脱离nounset ignoreeof braceexpand在interactive-comments onecmd了emacs在关键字从物理关闭errexit监控在pipefail脱离noclobber errtrace脱离特权了posix脱离noexec functrace hashall noglob关闭详细了histexpand nolog关闭vi历史通知了xtrace关闭
请注意,大部分的bash选项是关闭的。
看哪个选项启用脚本,使用相同的设置- o命令。如下所示的脚本将活动选项列表如上所示,但也会显示活跃的简洁one-letter-per-option格式选项。
# !/bin/bash设置- o回声= = = = = = = = = = = = = = = = = = = = = = = = = = = printf % s \ \ n”——“美元
这是一个示例的输出:
allexport braceexpand在emacs脱离errtrace errexit脱离hashall functrace histexpand关闭历史脱离interactive-comments ignoreeof字关闭监视器脱离noexec noclobber脱离nolog noglob了通知了nounset脱离身体脱离posix pipefail onecmd特权了详细了六世从xtrace了= = = = = = = = = = = = = = = = = = = = = = = = = = = hB
注意,“h”和“B”在这个输出的最后一行反映的状态hashall(h)和braceexpand(B)选项。
总结
更多的了解如何使用bash中的可用选项控制脚本运行的方式。我希望这篇文章能让你去一个很好的开始。