shell脚本执行报错[: 0: unary operator expected

在执行shell脚本,if判断语句报错

#!/bin/bash

if [ 0 == $testNum ]
then
    echo "Check Result:0"
fi

  

testNum使用时没有定义,无赋值是空(原本是有定义的,只是笔误写错类似tsetNum了),执行转换后实际为

if [ 0 ==  ]

不相等,且少[符号错误;规避如下

#!/bin/bash

if [[ 0 == $testNum ]]
then
    echo "Check Result:0"
fi

使用“[[ ]]”进行判断;或者添加一个字符

#!/bin/bash

if [ "0"x == "$testNumx"x ]
then
    echo "Check Result:0"
fi

  

其实,针对我所犯的错误,当然还是使用“[]”普通判断为好了,可以检查错误;但是这种实现多是用来判断查询的值或者其他条件赋予的值是否满足条件,存在为空是正常的场景,所以要完善自己代码。

详细含义待补充  

原文地址:https://www.cnblogs.com/xinhua219/p/9285899.html

时间: 2024-11-05 19:29:21

shell脚本执行报错[: 0: unary operator expected的相关文章

shell 报错:unary operator expected"

一直学习perl,shell都忘得差不多了,今天写了个小脚本,判断脚本第二个变量不等于某字符串时的操作. if [ $? -eq 0 ] && [ $2 != "wp" ] then : #略 fi 如果不加第二个变量,运行时会出现[: !=: unary operator expected"的报错,最后调试时发现 [ != "wp"] 原来shell的变量不定义时会出现这种情况,那就直接双括号吧. [[ != "wp"

shell脚本运行报错$'\r': command not found

执行个别shell测试脚本运行报错$'\r': command not found 考虑到可能是windows与Linux的换行符不同的原因(windows是\r\n,Linux是\n)造成的,但是又不想一个个替换. 可以使用如下命令来解决: # vi 脚本名 命令行模式下输入: :set ff=unix :wq 退出即可 shell脚本运行报错$'\r': command not found 原文地址:https://www.cnblogs.com/abclife/p/12604441.htm

shell脚本报错:"[: =: unary operator expected"

shell脚本报错:"[: =: unary operator expected" md5_109a="81ab961153b62d207f0f517048881b5d" md5_109b=`md5sum install.bin|awk '{print $1}'` if [ $md5_109a != $md5_109b ] 原因,当文件install.bin不存在时, $md5_109b为空这样对比字符串就变成了 if [ 81ab961153b62d207f0f5

ubuntu脚本执行报错的检查思路

一.遇到的问题: 今天有朋友问我,说在CentOS上写好的脚本,在Ubuntu上没法正常使用,当时没在意,以为是权限没配置好,后来看了下,发现ubuntu跟CentOS的默认shell是不同的,如是记录下,避免以后忘记: 1.ubuntu默认的shell是连接到dash,而我们通常写的shell脚本使用的时bash. 2.bash和dash在一些方面是不兼容的.因此执行同一个脚本,两者结果不同,可能用./*sh可以执行,而sh *.sh报错. 3.Ubuntu之所以使用dash是因为其体积小,兼

字符串判空有空格报错:binary operator expected

使用-z或-n对一个变量判空时,需要注意若直接使用[ -n ${ARG} ]这种形式,若${ARG}中有空格将会报错, #!/bin/bash ARG="sd dd" if [ -n ${ARG} ]; then echo 'ARG:' ${ARG} else echo 'ARG is empty.' fi 输出: line 27: [: sd: binary operator expected ARG is empty. 解决方法,使用[[ -n ${ARG} ]]或[ -n &qu

Ubuntu下sh *.sh使用==操作符执行报错

----<鸟哥的Linux私房菜--基础篇>学习笔记 ubuntu默认的sh是连接到dash,而我们写shell脚本时使用的时bash.bash和dash在一些方面是不兼容的.因此执行同一个脚本,两者结果不一样,可能用./*sh可以执行,而sh *.sh报错. 为了正确实行使用./*.h 或者  bash *.sh  或者把==换成=(不兼容部分) 也可以直接让系统不使用dash....Ubuntu之所以使用dash是因为其体积小,兼容性高,但是悲催的时,一些bash可执行的脚步在dash下不

mysql5.5 免编译安装及脚本启动报错深入

Mysql安装环境简介: 最近在做MHA.已经安装完毕heartbeat和drbd,现在准备安装Mysql. Mysql安装目录:/opt/mysql Mysql数据目录:/data/mysql 备注:/data目录实际是drbd需要同步到备节点的磁盘分区 [[email protected] src]# df -h Filesystem     Size  Used Avail Use% Mounted on /dev/sda2      9.5G  2.0G  7.1G 22% / tmpf

shell脚本执行mysql语句出现的问题

shell脚本执行mysql语句出现的问题,问群里的大牛的到解答,是单引号问题,改成双引号即可 #小提示(对本主题没什么关联):ubuntu目前使用的是dash,导致一些for(()函数无法正常执行, sudo dpkg-reconfigure  dash 选择NO,就改会bash了 一.脚本内容如下: #/bin/bash hostname='192.168.2.52' port=3306 username='root' password='123456' #dbname='' #-----s

shell脚本执行冲突事件-ssh&while

今天发现一个问题: 先看下脚本内容: [email protected]/0 # cat !$ cat /tmp/test_nginx ls *.txt | tr ' ' '\n' | while read line do  echo $line if [ 'yes' == 'yes' ] then ssh  192.168.109.10 "echo 'yes'" else ssh 192.168.109.10 "echo 'no'" fi done 上面脚本很简单