为什么会出现此一元运算符预期错误?

时间:2020-05-22 10:49:07

标签: bash

我有一个bash脚本,我从字符串中获取一个数字,然后使用bash中的expr命令将其转换为INT。然后,我想看看第一个数字是否大于第二个数字。运行脚本时,我得到:unary operator expected

我的脚本是:

#!/bin/bash

name1="19.5"
name2="19.1"
name3=`expr $name1`
name4=`expr $name2`

if [ $name3 >= $name4 ]; then
    echo "${name3} is greater than ${name4}"
fi

我在做什么错?我不是将字符串号正确转换为INT吗?

1 个答案:

答案 0 :(得分:0)

>是用于重定向标准输出的运算符。因此,您尝试将]命令的标准输出重定向到名为=的文件,该文件仅使[仅具有两个参数($ name3和$ name4)。

因此,如果要进行文本比较,则必须使用[而不是[[ ... ]],这不是命令,但不是bash 语法的一部分,并且在方括号之间,重定向规则不适用。但是,您仍然没有<=作为运算符,只有<>。就您而言,这将是

if [[ ! $name4 < $name3 ]]; then ....

如果您想比较浮点数并坚持使用bash,可以使用bc并执行

if [[ $(bc <<< "$name3 <=  $name4") == 1 ]]; then

或者您用zsh而不是bash编写完整的shell脚本,并免费获得浮点算法:

if (( name3 >= name4 )); then  # zsh only!