【问题标题】:Testing for a bash Variable the right way以正确的方式测试 bash 变量
【发布时间】:2018-12-26 03:17:44
【问题描述】:

我已经看到很多关于如何正确执行此操作的评论,但不知何故它对我不起作用,我不知道为什么,我们将不胜感激。

示例代码:

#!/bin/bash
echo -en "\ec"
echo "."
#Dig MX Record
    DIG="$(which dig --skip-alias)"
    CurrentDomain="example.com"
    echo -n "${CurrentDomain} MX "
    CurrentMX="$(${DIG} ${CurrentDomain} MX +short)"
    readarray -t  ArrMX <<< "$CurrentMX";
    if [[ -n ${ArrMX[@]} ]]
    then
        printf '%s\n' "${ArrMX[@]}"
    else
        echo "No Entry"
    fi

如您所见,这只是循环列表的程序的一部分,大多数值都有效,但是当 dig 没有返回任何内容时,因为它没有 MX 条目,我得到 MX: unbound variable 但是我做 -z 测试...

有什么建议吗?

【问题讨论】:

  • 这段代码正在我的测试平台上运行 :-?哪条线路出现故障?

标签: bash dig


【解决方案1】:

您在脚本的某处设置了set -u,这会导致shell 在插入错误时抛出错误。正如您在dig 失败的情况下所说的那样,CurrentMX 变量未设置,当 尝试read 命令中访问它时,MX 之前未明确设置它抛出错误。

请注意,dig 在无法解析正确的主机时返回空结果。您可以通过 /usr/bin/dig example.com MX +short 进行检查,并在使用合适的主机运行时进行比较。

另外,您似乎混淆了read 命令中数组和变量的使用,read 命令的-a 标志接受一个数组,而不是一个变量.

【讨论】:

  • @Inian 我的脚本顶部有 set -o nounset 导致问题。至于我的 Array 用法,dig 将返回所有带有换行符的 MX 条目,所以它应该是一个数组......不过我会稍微改进一下代码;)
猜你喜欢
  • 1970-01-01
  • 2017-08-18
  • 2014-11-05
  • 2012-05-29
  • 2012-07-06
  • 1970-01-01
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多