linux - Shell 脚本 - 如果变量为 null 或为空则退出脚本

标签 linux bash shell unix

我希望在我的 bash 脚本中使用以下变量,但万一它为空或 null,那么处理它并退出脚本的最佳方式是什么。

tag=$1  

我看到了“set -u”的答案。我知道这会起作用,但这对生产环境有用吗?

最佳答案

有一个内置运算符用于要求设置变量。如果没有,这将导致脚本退出。

tag=${1?Need a value}

通常这与 : 一起使用脚本开头附近的空操作。

: ${1?Need a value}

“未设置或空”的合并有些不同。没有类似的结构用于退出一个空但设置的值,但您可以轻松使用相关语法 ${var:-default}扩展为 $var如果它已设置且非空,并且 default否则。还有${var-default}只产生 default如果变量被正确取消设置。

当您想要使用 set -u 时,这会特别有用但需要处理一个可能未设置的变量:

case ${var-} in '') echo "$0: Need a value in var" >&2; exit 1;; esac

我有点喜欢 caseif [ "${var-}" = '' ] ,主要是因为它使我不必在 ${var-} 周围加上双引号,以及 $var 中值的讨厌情况它被解释为 [ 的选项并在您最意想不到的时候给您一条错误消息。 (在 Bash 中,[[ 没有这些问题;但我更愿意尽可能坚持使用 POSIX shell。)

关于linux - Shell 脚本 - 如果变量为 null 或为空则退出脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164284/

相关文章:

linux - 打开新的 shell session 时,我的 Bash 脚本不响应 SIGNALS

c++ - Linux系统优雅关闭TCP Server

c - 使用 "undefined symbol: new_add"后还是报 "objcopy --redefine-sym add=new_ad"

linux - rpm 文件中的文件类型

JavaScript:从网络复制时, trim 所有前导空格以及所有 CR

c++ - 运行我的程序说 "bash: ./program Permission denied"

shell - 如何使用awk获取数据框所有值的总和

linux - 从网页运行 bash 文件

linux - 使用具有 xml 值的变量的 awk 模式匹配

bash - 如何将 SIGINT 发送到 shell 脚本?