リモートシステムでif文を実行する

リモートシステムでif文を実行する

ifステートメントを含むコマンドセットをリモートコンピュータで実行しようとしています。 kvm インスタンスのリストを終了するために使用します。最初の行は大丈夫ですが、もっと美しく、残りは助けが必要です。

ssh root@kvmsrv 'virsh shutdown $host 2> /dev/null; virsh destroy $host 2> /dev/null; sleep 2; virsh undefine $host 2> /dev/null'

# Also needs to be run on remote machine
# to disconnect iscsi
iscsiadm -m session | grep $host
if [ $? == 0 ]; then
  iscsiadm -m node -T $stserver.$host -u
fi

# then on local machine
tid=`ssh root@storage1 'cat /proc/net/iet/volume' | grep $host | head -1 | awk '{print $1}' | awk -F: '{print $2}'`
if [ $tid ]; then
  echo "Deleting tid:$tid from $stserver."
  ssh root@$stserver "ietadm --op delete --tid=$tid"
fi

私は2番目の部分でも同じことをし、;で区切ることができると思いました。しかし、誰かが後で私のコードを読むと、頭を傷つけるかもしれません...

読みやすく意味があり、すべてのリモートコマンドが正しく実行されるように、これらすべての項目をフォーマットする方法はありますか?

ベストアンサー1

  1. 長くて複雑なコマンドシーケンスを独自のシェルスクリプトに入力します。virsh-shutdown-remote.sh

  2. 入力リダイレクトを実行し、ssh使用してスクリプトを実行します。

    ssh root@kvmsrv < virsh-shutdown-remote.sh
    

とにかく、コマンドをスクリプトに入れることをお勧めします。

追加のヒントとして、次の代わりに:

iscsiadm -m session | grep $host
if [ $? == 0 ]; then
  iscsiadm -m node -T $stserver.$host -u
fi

1行に同じ内容をはるかに簡単で短くすることができます。

iscsiadm -m session | grep $host && iscsiadm -m node -T $stserver.$host -u

おすすめ記事