次のスクリプトを組み合わせる必要があります。彼らは別々に非常にうまく動作します。 1つの条件が成功した場合、残りの2つの条件は無視する必要があります。
a="primary"
b=`virtinfo -a |grep name |'awk' '{ print $3}'`
if [ "$a" == "$b" ]
then
echo "`hostname` I'm Control Domain"
ldm list | awk '{ print $1}'
fi
a=`cat /etc/nodename`
b=`virtinfo -a |grep name |'awk' '{ print $3}'`
if [ "$a" = "$b" ]
then
echo "`hostname` I'm Ldom"
virtinfo -a |grep Control
zoneadm list|grep -v global
fi
if [ ! "`/usr/bin/zonename`" = 'global' ]
then
echo " `hostname` im in a Local Zone"
fi
答え1
私はあなたの論理を正しく理解することを願っています。
これは、マシンが同時に複数のドメイン(またはゾーンまたは希望の名前)に存在することはできないと仮定します。システムが「制御ドメイン」にない場合は、「Ldom」にあることを確認し続けます。それ以外の場合は、「ローカルエリア」にあることを確認してください。一致するものがない場合は、「完了しました」というメッセージが表示されます。
virtname="$( virtinfo -a | awk '/name/ { print $3 }' )"
myname="$( hostname )"
if [[ "$virtname" == "primary" ]]; then
printf '%s, I am Control Domain\n' "$myname"
ldm list | awk '{ print $1 }'
elif [[ "$virtname" == "$( cat /etc/nodename )" ]]; then
printf '%s, I am Ldom\n' "$myname"
virtinfo -a | grep "Control"
zoneadm list | grep -v "global"
elif [[ "$( /usr/bin/zonename )" != "global" ]]; then
printf '%s, I am in a Local Zone\n' "$myname"
else
printf '%s, I am totally lost\n' "$myname"
fi
明らかに、シェルがこれを理解していると仮定します[[ ... ]]
。そうでない場合、修正は簡単です。
virtinfo
このコードはアクセス権などがないため、完全にテストされていません。