【问题标题】:Bash script compare number obtained from a cutBash 脚本比较从剪切中获得的数字
【发布时间】:2020-01-04 15:34:36
【问题描述】:

我有一个这样的字符串

"Hello catch these numbers 20 30"

我有:

NUMBER_ONE=$(echo "$line" | cut -d' ' -f5)
NUMBER_TWO=$(echo "$line" | cut -d' ' -f6)

当我比较 if [ "$NUMBER_ONE" -gt "$NUMBER_TWO" ]; 时出现错误,它需要一个整数表达式。我该如何解决?

【问题讨论】:

  • 你的命令对我有用。你是如何准确运行这个的?你如何分配给line?完整的if 声明是什么?
  • 另外,尝试将set -x 放在这些命令之前,以使shell 在执行命令时打印出它认为正在发生的事情。
  • printf "NUMBER_ONE=%s NUMBER_TWO=%s\n" "$"NUMBER_ONE" "$"NUMBER_TWO" 怎么样,看看这是否能说明问题。

标签: string bash shell scripting


【解决方案1】:

问题可能在于将值“Hello catch these numbers 20 30”分配给line 变量。或者,您可以使用以下方法来实现相同的目的。它在比较之前将数字的字符串表示形式转换为整数。在 bash 中,您可以使用 printf -v 执行从任何值到整数的转换。即使是浮点数也会被转换为整数,而任何看起来不像数字的东西都会被转换为0。求幂将被截断为e之前的数字

#!/bin/bash

line="Hello catch these numbers 20 30"

words=$(echo ${line} | sed -e 's/ /\n/g')
nums=($(echo "${words}" | sed -e '/^[0-9]*$/!d'))

printf -v num1 '%d' "${nums[0]}" 2>/dev/null
printf -v num2 '%d' "${nums[1]}" 2>/dev/null

if [[ $num1 -gt $num2 ]]; then
    echo "$num1 is greater than $num2"
elif [[ $num1 -lt $num2 ]]; then
    echo "$num1 is lesser than $num2"
fi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    • 2014-02-03
    • 2011-12-19
    • 1970-01-01
    • 2013-02-21
    • 2016-01-08
    相关资源
    最近更新 更多