我有一个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吗?
答案 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!