脚本报错:unary operator expected

脚本执行,出现如下错误:“h.sh: line 9: [: ==: unary operator expected”,具体脚本如下:

[root@Dasoncheng sbin]# cat -n h.sh 
     1	#!/bin/bash
     2	sh -n $1 &>/tmp/err
     3	if [ $? -eq 0 ];
     4	then
     5	    echo "The script is ok"
     6	else
     7	    cat /tmp/err
     8	    read -p "Please input q/Q to exit , or others to edit it by vim: " n
     9	    if [ $n == "q" ] || [ $n == "Q" ];
    10	    then
    11	        exit
    12	    else
    13	        vim $1
    14	        exit
    15	    fi
    16	fi
[root@Dasoncheng sbin]# sh h.sh i.sh 
i.sh: line 3: syntax error: unexpected end of file
Please input q/Q to exit , or others to edit it by vim: 
h.sh: line 9: [: ==: unary operator expected
h.sh: line 9: [: ==: unary operator expected  ##这个就是执行的报错信息;

解决办法:

 if [ $n == "q" ] || [ $n == "Q" ];修改为:if [ "$n" == "q" ] || [ "$n" == "Q" ];
##即可;

因为当$n为空值时(即回车 未输入任何参数),那么就成了 [ = "q"]了,显然缺少了对比参数。当$n值不为空时,脚本还是正常的;
使用如下几种方法,也可以避免:

 if [[ $n == "q" ]] || [[ $n == "Q" ]]
##或者
if [ "$n"x == "q"x ] 
##其中x也可以为其他字符; 

转载于:https://my.oschina.net/u/3651233/blog/1622608

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值