微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Shell脚本 – 如果variables为空或空,则退出脚本

我期待在我的bash脚本中使用下面的variables,但在这种情况下,如果这是空或null什么将是最好的方式来处理它,并退出脚本。

tag=$1

我看到“set -u”的答案。 我知道这会工作,但是这对生产环境有好处吗?

在Linux shell的另一个函数里面终止函数

为什么我的sed命令在使用variables时失败?

我如何写pid到文件

在初始化/ bash脚本中同时执行几个程序

如何从cron运行的脚本打开xterm?

一个内置的操作符要求设置一个变量。 如果不是,则会导致脚本退出

tag=${1?Need a value}

通常用于脚本开头附近的no-op。

: ${1?Need a value}

“未定或空白”的混合有些不同。 没有类似的结构用于退出空的设置值,但是可以很容易地使用相关的语法${var:-default} ,如果它被设置${var:-default}空的,则相应的扩展为$var ,否则为default 。 还有${var-default} ,只有在变量没有被正确设置时才会产生default 。

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

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

if [ "${var-}" = '' ]我更喜欢case ,主要是因为它省去了${var-}双引号,而$var的麻烦大于$var作为一个选项[当你最不期待的时候给你一个错误信息。 (在Bash中, [[没有这些问题;但是我更喜欢坚持POSIX shell。

如果你想测试一个变量是非空的,你可以这样做:

if [ -z "$tag" ]; then exit 1 fi

从test手册:

-Z STRING

STRING的长度为零

鉴于您正在使用脚本的位置参数,您还可以通过查看$#测试您收到的参数的数量

我不确定是否要检测变量是未unset还是为empty 。 这是两件不同的事情。 具体来说,一个变量可以被设置,但是是空的:

$ var="" $ if [ -z "$var" ]; then echo empty; fi $ empty

这里也是一样:

#!/usr/bin/env bash set -u echo $1

测试:

$ ./test.sh ./test.sh: line 4: $1: unbound variable $ ./test.sh "" $

或者在这里

#!/usr/bin/env bash tag=${1?Need a value} echo $tag

测试:

$ ./se.sh ./se.sh: line 3: 1: Need a value $ ./se.sh "" $

其他海报已经提出了正确的方法来检测未设置和空的变量。 就我个人而言,我喜欢这种检测空白和未设置变量的方式:

#!/usr/bin/env bash if [ "$1"A = A ] then echo variable is empty or unset fi

测试:

$ ./empty.sh "" variable is empty or unset $ ./empty.sh variable is empty or unset $ ./empty.sh 1 $

我更喜欢Perl如何使用“死”,并且在shell中做类似的事情很容易。

# Print (optional) error message and exit # Usage: die [[msg] exit_status] die() { [[ -n "$1" ]] && echo "$1" [[ -n "$2" ]] && exit $2 || exit 1 } [[ -n "$tag" ]] || die "Need a tag argument. Use $0 --help for details"

这个假定是bash或者korne shell,但是可以通过改变[]]到[]来转换为经典的外壳。

使用模式匹配来检测值是否只包含空格:

pattern=$'*( |t)' if [[ $1 = $pattern ]]; then echo "First parameter has no non-whitespace characters" exit 1 fi

$'...'引用使得向该字符串添加一个标签变得更容易。 扩展模式*(...)匹配0或更多的括号内的模式(类似于正则表达式( |t)* )。 该模式被分配给一个变量,因为=如果右手边操作数的任何部分被引用,则执行精确的字符串匹配,所以我们事先执行引用以便更容易地设置值。

下面的测试确保一个变量是Null或者赋值给它。双引号非常重要,必须使用!

VAL= # Creates a NULL variable if [[ -z "$VAL" && "$VAL" = '' ]] then echo "The VAL variable is NULL" fi or VAL=25 if [[ ! -z "$VAL" && "$VAL" != '' ]] then echo "The VAL variable is NOT NULL" fi

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐