1

私は現在、スクリプトを単純化しようとしています。コマンドごとにホスト名を手動で入力する代わりに、変数を使用できるようにしたいですか?アレイ?ある種の。あなたが助けることができるかどうか疑問に思っていました。

例:

hostname1=192.168.1.1
hostname2=192.168.1.2

echo "What would you like to do?"
echo "(1)Ping Hosts"
echo "(2)mkdir /tmp/test"
echo "(3)write to test.txt"
read num_variable

if num_variable = 1
then
ping hostname1
ping hostname2

if num_variable = 2 
ssh -n hostname1 "mkdir /tmp/test"
ssh -n hostname2 "mkdir /tmp/test"

if num_variable = 3
ssh -n hostname1 "echo 'hello' > /tmp/test/test.txt"
ssh -n hostname2 "echo 'hello' > /tmp/test/test.txt"

「これを書く簡単な方法はありますか?」

例:

Hosts=hostname1,hostname2

ここにコマンドがありますか?

ホスト名を一番上にリストし、num変数ごとに、その特定のセクションにリストされているホストに対して以下のすべてのコマンドを実行するだけで、20,000行が必要です。

4

3 に答える 3

5

アレイを作成します。

hosts=(hostname1 hostname2 hostname3)

複数の行に分割できます。

hosts=(
        hostname1 
        hostname2 
        hostname3
      )

要素を繰り返し処理します。

for host in "${hosts[@]}"
do
    echo "$host"
done

特定のホストにアクセスします。

echo "${hosts[2]}"

次のselectコマンドを使用してメニューを作成します。

PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option3" "Quit")
select opt in "${options[@]}"
do
    echo "Opt: $opt, Reply: $REPLY"
    case $opt in
        "Option 1")
            echo "you chose choice 1"
            ;;
        "Option 2")
            echo "you chose choice 2"
            ;;
        "Option 2")
            echo "you chose choice 3"
            ;;
        "Quit")
            break
            ;;
        *) echo invalid option;;
    esac
done
于 2012-07-09T17:46:35.733 に答える
2

Bashには、反復可能な配列があります。

hosts=(hostname1
       hostname2
       hostname3)

for host in "${hosts[@]}"; do
   ssh -n "$host" "echo 'hello' > /tmp/test/test.txt" 
done
于 2012-07-09T17:46:12.327 に答える
0

forループとcaseステートメントを使用できます。

forループの例は次のとおりです。

nodes="192.168.1.1 192.168.1.2 192.168.1.3"
for node in $nodes
do
    echo $node
done

caseステートメントの例は次のようになります

case "$num_variable" in
    "1" ) echo "1";;
    "2" ) echo "2";;
    "3" ) echo "3";;
esac

2つを組み合わせるのはあなたにとっての練習です:-)

の良いリファレンスbashは、AdvancedBash-ScriptingGuideです。

于 2012-07-09T17:54:07.090 に答える