2

-bashスクリプトの場合-追加された1つのコンピューター名を、ループなしで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 に答える