2

-对于 bash 脚本-我想知道是否可以将添加的计算机名称与 if[ $1 = ] 内的计算机名称列表进行比较,而无需循环,只是为了检查它是否是列表中的计算机-继续,如果不 - 停止。谢谢你的想法

4

3 回答 3

3

不知道为什么你不想使用循环:

COMPUTERS=( hosta hostb hostc )

for COMPUTER in ${COMPUTERS[@]}; do
    if [ "${COMPUTER}" == "${1}" ];
    then
        echo "Yep. It's in the list."
    fi
done
于 2013-01-23T04:31:37.613 回答
1

有几种方法。如果你真的想使用 if,你可以这样做(注意变量周围的空格):

#!/bin/bash
COMPUTERS="hosta hostb hostc"

if [[ " $COMPUTERS " =~ " $1 " ]] ; then
    echo "Yes, $1 is in the list"
else
    echo "No, $1 is not in the list"
fi

我自己喜欢案例:

case " $COMPUTERS " in
    *" $1 "*) echo "Yes, $1 is in the list" ;;
    *) echo "No, $1 is not in the list" ;;
esac

注意:这些都不是万无一失的。例如,“hosta hostb”将匹配可能不是您想要的,但如果您知道您的数据格式正确,或者应用额外的检查,它很简单并且有效。

于 2013-01-23T23:04:51.023 回答
0

如果您有一个包含可用主机名的空格分隔列表:

COMPUTERS="hosta hostb hostc"
echo ${COMPUTERS} | grep -qw "$1" && echo "$1 is in the list"
于 2013-01-23T09:32:35.430 回答