3つのスクリプトを組み合わせる[閉じる]

3つのスクリプトを組み合わせる[閉じる]

次のスクリプトを組み合わせる必要があります。彼らは別々に非常にうまく動作します。 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このコードはアクセス権などがないため、完全にテストされていません。

関連情報