shell执行if报错(No such file or directory)

博客讲述了在Shell脚本中遇到的if条件判断错误,当命令执行出错时出现'[': cat: binary operator expected'的问题。通过分析发现,错误发生在使用`if [-z $com]`时,若命令输出错误则导致语法解析异常。解决方案是将条件判断改为`if [[ -z $com ]]`,修正后的脚本能够正确处理命令执行的错误输出,不再出现语法错误。
摘要由CSDN通过智能技术生成

这里是因为if的默认输出为正常时就[  -z $com ]没有问题,当输出错误就少了[],加上就没有问题了

脚本

#!/bin/bash
while :
do
    read -p "请输入要执行的命令:" com
    if [ -z $com ];then
       exit
    fi
    $com &> /dev/null
    if [ $? == 0 ];then
        echo "执行的命令是 $com" 
        echo "命令执行成功,结果是:"
        $com
    else
        echo "执行的命令是 $com" 
        echo "命令执行错误报,错如下"
        $com
    fi
done

执行报错

~]# ./mkdir.sh
请输入要执行的命令:ls
执行的命令是 ls
命令执行成功,结果是:
keke  mkdir.py	mkdir.sh

#————————————————————————————————
请输入要执行的命令:cat /dd
./mkdir.sh: line 5: [: cat: binary operator expected
执行的命令是 cat /dd
命令执行错误,报错如下
cat: /dd: No such file or directory


## 这里可以看到当输出是正常的时候就不会报错,但是当输出为错误输出时就会报错([: cat: binary operator expected)

注:这里是因为if的默认输出为正常时就[  -z $com ]没有问题,当输出错误就少了[],加上就没有问题了

解决

~]# vim mkdir.sh
#!/bin/bash
while :
do
    read -p "请输入要执行的命令:" com
    if [[ -z $com ]];then
       exit
    fi
    $com &> /dev/null
    if [ $? == 0 ];then
        echo "执行的命令是 $com" 
        echo "命令执行成功,结果是:"
        $com
    else
        echo "执行的命令是 $com" 
        echo "命令执行错误,报错如下:"
        $com
    fi
done


# 执行结果
~]# ./mkdir.sh
请输入要执行的命令:ls
执行的命令是 ls
命令执行成功,结果是:
keke  mkdir.py	mkdir.sh
#-------------------------------
请输入要执行的命令:cat /dd
执行的命令是 cat /dd
命令执行错误,报错如下
cat: /dd: No such file or directory
# 此时就可以看到没有报错了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值