条件问题

时间:2011-03-05 09:27:34

标签: shell sh

如何编写一个执行两件事的POSIX shell脚本:

1)当定义$ var1 OR $ var2且非空时,回显“成功”
2)当$ var3定义为任何东西时,回显“success2”

我尝试了-ne -z和-a运算符的许多组合,但我没有运气。

1 个答案:

答案 0 :(得分:2)

(我在POSIX模式的Bash shell中测试了以下内容 - 我并不完全确定所有内容都是严格的POSIX)

$ var1=
$ var2=
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi
$ var2=1
$ if [ -n "$var1" -o -n "$var2" ]; then echo "success"; fi
success
$ var3=
$ if [ -n "${var3+X}" ]; then echo "success2"; fi
success2
$ unset var3
$ if [ -n "${var3+X}" ]; then echo "success2"; fi
$ 

第一个条件[ -n "$var1" -o -n "$var2" ]利用了非空要求也暗示变量已设置的事实。

第二种情况比较棘手。如果"${var3+X}"未设置,则var3 expands为空,如果设置为X则为{{1}}。这样你可以分开unset和null变量。