首页 > 解决方案 > 以正确的方式测试 bash 变量

问题描述

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

示例代码:

#!/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 测试.. .

有什么建议么?

标签: bashdig

解决方案


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

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

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


推荐阅读