当shell脚本中的文件为空时,条件二进制运算符预期错误

时间:2018-01-25 10:24:35

标签: bash shell sh

我在路径/ root / user /中有一个名为MYNAME的文件 有一些价值说SSS_14_10_1992

当文件中存在值时,以下代码可以正常工作 但是当文件为空时,则抛出下面提到的错误

我正在从文件中读取此值并将其与通配符匹配并执行某些操作,当文件具有某些值时,以下代码正常工作,当文件为空时,我将收到条件错误

以下是我的代码

var=$(cat /root/user/MYNAME)

echo $var

su - uname<<!
pwd

if  [ -z "$var" ]; then
   echo "NAME SHOULD BE PROVIDED IN MYNAME FILE"
else
   if [[ $var == SSS_14_10* ]]
     then
     echo "value is matched"
   else
     echo "value has not matched"
   fi
fi
!    

文件为空时 我收到以下错误:

: conditional binary operator expected
: syntax error near `SSS_14_10*'
: `   if [[  == SSS_14_10* ]]'

2 个答案:

答案 0 :(得分:2)

尝试比较"$var"(与引号)而不是$var(不带引号)。这样,如果变量为空,则只需比较""

答案 1 :(得分:2)

不要像这样动态生成代码。将$var的值作为参数传递给su运行的脚本。

var=$(cat /root/user/MYNAME)

echo "$var"

su - uname<<'!' "$var"
pwd

if  [ -z "$1" ]; then
   echo "NAME SHOULD BE PROVIDED IN MYNAME FILE"
elif [[ $1 == SSS_14_10* ]]; then
   echo "value is matched"
else
   echo "value has not matched"
fi
!    

请注意here-doc分隔符周围的单引号;这样可以确保su按原样查看此处的文档,以便不再需要转义。