Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在shell脚本中的if条件中检查null值或字符值_Shell_Unix_If Statement_Null_Sh - Fatal编程技术网

在shell脚本中的if条件中检查null值或字符值

在shell脚本中的if条件中检查null值或字符值,shell,unix,if-statement,null,sh,Shell,Unix,If Statement,Null,Sh,我试图结合两个条件来检查字符值或空值。由于某些原因,它们只能单独工作,当我试图以“或”的形式将它们组合在一起时,会产生错误。我错过什么了吗 RETENTION= #either a character value or null value if [[ "$RETENTION" == +([a-zA-Z]) ]] || [ -z "$RETENTION"] ; then #bad input #exit 1 单独使用elif也不起作用。只有一个条件有效。您的条件中有一个输入错误: if [

我试图结合两个条件来检查字符值或空值。由于某些原因,它们只能单独工作,当我试图以“或”的形式将它们组合在一起时,会产生错误。我错过什么了吗

RETENTION= #either a character value or null value
if [[ "$RETENTION" == +([a-zA-Z]) ]] || [ -z "$RETENTION"] ; then
 #bad input
 #exit 1

单独使用elif也不起作用。只有一个条件有效。

您的条件中有一个输入错误:

if [[ "$RETENTION" == +([a-zA-Z]) ]] || [ -z "$RETENTION" ] ; then
应该是:

if [[ "$RETENTION" == +([a-zA-Z]) ]] || [ -z "$RETENTION" ] ; then
在您的或条件之前,您已关闭了双方括号

更新 实际解决方案是交换条件的顺序:

if [ -z "$RETENTION" ] || [[ "$RETENTION" == +([a-zA-Z]) ]]  ; then

你犯了什么错误?另外,在
之后您有什么问题?我在尝试更正行时出错。我收到这条消息shellscript.sh[161]:0403-057第161行的语法错误:`]'不是预期的。我无法实际测试它,但括号看起来并没有正确平衡。试着把这两个条件都用双方括号括起来,在它们之间加上或。我翻转了这两个条件,它似乎起作用了。[-z“$RETENTION”]|[[“$RETENTION”==+([a-zA-z])]感谢您的帮助打字错误代码和“应该”代码之间没有区别!