string - 读取字符串并转换为 INT (BASH)

标签 string bash shell scripting

我在 Bash 中有一个简单的脚本来读取文件中的数字,然后将其与不同的阈值进行比较。输出是这样的:

: integer expression expected
: integer expression expected
OK: 3

我的代码是这样的:

#!/bin/bash

wget=$(wget http://10.228.28.8/ -O /tmp/wget.txt 2>/dev/null)
output=$(cat /tmp/wget.txt | awk 'NR==6')
#output=7
echo $output

if [ $output -ge 11 ];then
    echo "CRITICAL: $output"
    exit 2
elif [ $output -ge 6 ] && [ $output -lt 11 ];then
    echo "WARNING: $output"
    exit 1
else
    echo "OK: $output"
    exit 0
fi

rm /tmp/wget.txt

我知道问题出在哪里,我知道我正在读取一个字符串并尝试比较一个 int。但我不知道我该怎么做才能读取这个文件并将数字转换为在 int var 中读取..

有什么想法吗?

最佳答案

$output为空字符串时出现问题;无论你是否引用扩展(你应该),你都会得到 integer expression required 错误。您需要显式处理空字符串,默认值为零(或任何有意义的默认值)。

wget=$(wget http://10.228.28.8/ -O /tmp/wget.txt 2>/dev/null)
output=$(awk 'NR==6' < /tmp/get.txt)
output=${output:-0}

if [ "$output" -ge 11 ];then
  echo "CRITICAL: $output"
  exit 2
elif [ "$output" -ge 6 ];then
  echo "WARNING: $output"
  exit 1
else
  echo "OK: $output"
  exit 0
fi

(如果你到达elif,你已经知道$output的值小于11;不需要再检查。)


如果 output 以回车结束,也会出现该问题,与错误信息一致。你可以删除它

output=${output%$'\r'}

关于string - 读取字符串并转换为 INT (BASH),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38395450/

相关文章:

bash - 如何在 Bash 中管理长路径?

linux - 如何从多个文件中剪切多列并将输出打印到不同的文件

linux - 从查找中排除文件列表

c# - PowerShell 脚本表达式或语句中出现错误 "Unexpected token ' h'。字符串缺少终止符 :"

java - 我应该如何用双字符替换双空格(连续空格)?

bash - 根据多列匹配汇总一列(部分部分)

linux - 在linux中从具有1列的文本文件中删除具有2列的文件中的整行

shell - 如何防止在 PowerShell 中保存以空格开头的输入历史记录?

arrays - swift 2 : How can I assign a dynamic number of strings to an array of Strings?

[R] 中两列的字符串匹配