我想要一個腳本,它將在各自的服務器上重新啓動已定義的服務。我想通過參數如下的腳本:例如:如何解析用戶輸入到bash腳本
sh execute.sh [server1:nginx,mysqld],[server2:mysqld,apache2],[server3:mongodb,apache2]
所以應該去Server1和重啓nginx的和mysqld服務在那邊。然後到server2,並且應該在那裏重新啓動mysqld和apache等等。
我的劇本象下面這樣:
#!/bin/bash
# create an array of server:services
a=($(echo "$1" | gawk 'BEGIN { FS="[]],[[]" } ; { print $1, $2, $3 }' | tr -d '[]'))
# add a for loop here to iterate values in array with code below
for var in "${a[@]}" ; do
# get server name
server1=$(echo $a[0] | cut -d ':' -f1)
# get your services as space separated
servs1="$(echo $a[0] | cut -d ':' -f2 | tr ',' ' ')"
# loop your services
for s in $servs1; do
ssh $server1 "service $s restart"
done
done
上述腳本只能夠到grep的第一個服務器名稱和服務。請幫助獲取他人。
你可能想學習[傀儡](http://puppetlabs.com/)。 –
爲什麼你想讓這個參數看起來像那樣?僅僅因爲你認爲它看起來不錯,或者因爲你有其他一些腳本產生這些字符串?因爲遵循標準的做事方式通常比較容易,在bash腳本的情況下,每個參數傳遞一個參數,標點符號少得多。 (比如''restart server1:nginx,mysqld server2:mysqld,apache server3:mongodb,apaches') – rici