这里是因为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 # 此时就可以看到没有报错了