如果条件外壳程序脚本的这段代码是我的,对于正确的情况它可以正常工作,对于错误的情况,输出虽然是但得到[:行:未知运算符
ut=$(echo -ne "set heading OFF\n select user_type from usertype where acm_login = '$acmlogin';" | sqlplus -s ${ORA_UID_PSWD})
if [ $ut != "no rows selected" ]
then
print "Usertype of an user $acmlogin is $ut\n"
print "press <cr> to continue > \c"
else
print "Usertype not defined\n"
print "press <cr> to continue > \c"
fi
我正在得到其他类似下面的部分的输出
usertype[867]: [: rows: unknown operator
Usertype not defined
答案 0 :(得分:1)
为便于说明,我们假设 ut 变量的值为
ut = '2 rows selected'
在评估过程中,$ ut会在没有双引号的情况下进行扩展,因此它等效于:
if [ $ut != "no rows selected" ]
# is being treated by bash shell as
if [ 2 rows selected != "no rows selected" ]
因此,bash在这里看到多个参数。它认为第一个参数是2,并且期望第二个参数行是运算符,因此它抱怨行不是运算符
一种简单的解决方案是将$ ut放在双引号中。因此,这将解决问题:
if [ "$ut" != "no rows selected" ]