else条件がある場合のトリミング用のシェルスクリプト

else条件がある場合のトリミング用のシェルスクリプト

以下のスクリプトを実行すると、正常な出力が得られます。ここで試すことは、以下にリストされているすべてのVMに接続する必要があり、スクリプトsshが次のように出力をwasadmds03印刷するときにproduct detail他のVMと同様にコマンドも実行する必要があることです。 "cat /source/package.json | grepバージョン"すべての仮想マシンで。

必要な出力を得ました。しかし、繰り返しの「if then」ステートメントを切り取る方法はありますか?私は "if then"ステートメントを4回使用しました。 50台の仮想マシンで同様の練習をしたい場合は、このプログラムをより短い方法で書く方法はありますか?

wasadmds03 - product detail
wasadmds04 - product list
wasadmls03 - Cart
wasadmls05 - checkout
  • スクリプト

**

#!/bin/bash
for i in `cat /tmp/ms_test`
do
        if [ $i = wasadmds03 ]
        then
            echo "Product Detail"
            ssh $i "cat /source/package.json | grep version"
        fi
        if [ $i = wasadmds04 ]
        then
            echo "Product list"
            ssh $i "cat /source/package.json | grep version"
        fi
        if [ $i = wasadmls03 ]
        then
            echo "Merchant"
            ssh $i "cat /source/package.json | grep version"
        fi
        if [ $i = wasadmls05 ]
        then
            echo "Account Details"
            ssh $i "cat /source/package.json | grep version"
        fi
done

ベストアンサー1

したがって、問題は、ファイルから読み取ったホスト名に基づいて特定のラベルを出力したいようです。

我々は間違いなくコードを少し圧縮することができます。各ホストで異なる必要があるテキストラベルを連想配列に保存すると、次のようになります。

printf '%s\n' "${labels[$remote]}"
ssh -n "$remote" 'cat /source/package.json' | jq -r .version

...ループ内で。

iここでは、ループ変数の名前をより説明的に自由に変更しましたremote。私もprintf代わりに使用していますecho(」なぜprintfがechoより優れているのですか?jq「)を使用する代わりに、実際のJSONパーサーを使用してJSONデータファイルを解析することを選択しましたgrep推測するversionJSONデータには最上位キーがあります。

sshssh -n使用しているループ反復の入力を読み取らないように呼び出す必要があります。

配列labelsは次のように作成できます。

declare -A labels
labels=(
    ['wasadmds03']='Product Detail'
    ['wasadmds04']='Product List'
    ['wasadmls03']='Merchant'
    ['wasadmls05']='Account Details'
)

リモートホスト名が多い場合は、同様の方法でこの配列にリストする必要があります。このデータを他の方法で提供するわけではないので、各項目をリストする必要があります。

これは、リモートホスト名を正しく読み取ることで/tmp/ms_test行われます("「IFS=read-r-line」を理解する")は次のスクリプトを提供します。

#!/bin/bash

declare -A labels
labels=(
    ['wasadmds03']='Product Detail'
    ['wasadmds04']='Product List'
    ['wasadmls03']='Merchant'
    ['wasadmls05']='Account Details'
)

while IFS= read -r remote; do
    printf '%s\n' "${labels[$remote]}"
    ssh -n "$remote" 'cat /source/package.json' | jq -r .version
done </tmp/ms_test

おすすめ記事