如何将计算机名称与if语句中的名称列表进行比较

时间:2013-01-23 04:23:58

标签: bash

- 对于bash脚本 - 我想知道是否有可能将添加的一个计算机名称与内部的计算机名称列表进行比较,如果[$ 1 =]没有循环,只是为了检查它是否是列表中的计算机 - 继续,如果不是 - 停止。感谢您的想法

3 个答案:

答案 0 :(得分:3)

不确定为什么你不想使用循环:

COMPUTERS=( hosta hostb hostc )

for COMPUTER in ${COMPUTERS[@]}; do
    if [ "${COMPUTER}" == "${1}" ];
    then
        echo "Yep. It's in the list."
    fi
done

答案 1 :(得分: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”将匹配哪个可能不是您想要的,但如果您知道您的数据格式正确,或者应用其他检查,那么它很简单且有效。

答案 2 :(得分:0)

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

COMPUTERS="hosta hostb hostc"
echo ${COMPUTERS} | grep -qw "$1" && echo "$1 is in the list"