我已經創建了這個腳本,它目前正在從命令列獲取引數串列,但我想要做的是讓用戶傳遞任何數值,然后開始執行用戶要求的次數的回圈。該腳本以以下方式運行,例如./testing.sh launch 1 2 3 4 5 6 7 8。如何讓用戶傳遞一個像8這樣的數值,然后回圈遍歷 IP 而不是1 2 3 4 5 6 7 8。還有沒有更好的方法來處理我在腳本中傳遞的如此多的 IP,例如映射它們并從檔案中讀取它們。
#!/bin/bash
#!/usr/bin/expect
ips=()
tarts=()
launch_tarts () {
local tart=$1
local ip=${ip[tart]}
echo " ---- Launching Tart $1 ---- "
sshpass -p "tart123" ssh -Y -X -L 5900:$ip:5901 tarts@$ip <<EOF1
export DISPLAY=:1
gnome-terminal -e "bash -c \"pwd; cd /home/tarts; pwd; ./launch_tarts.sh exec bash\""
exit
EOF1
}
kill_tarts () {
local tart=$1
local ip=${ip[tart]}
echo " ---- Killing Tart $1 ---- "
sshpass -p "tart123" ssh -tt -o StrictHostKeyChecking=no tarts@$ip <<EOF1
. ./tartsenvironfile.8.1.1.0
nohup yes | kill_tarts mcgdrv &
nohup yes | kill_tarts server &
pkill -f traf
pkill -f terminal-server
exit
EOF1
}
tarts_setup () {
local tart=$1
local ip=${ip[tart]}
echo " ---- Setting-Up Tart $1 ---- "
sshpass -p "root12" ssh -tt -o StrictHostKeyChecking=no root@$ip <<EOF1
pwd
nohup yes | /etc/rc.d/init.d/lifconfig
su tarts
nohup yes | vncserver
sleep 10
exit
exit
EOF1
}
ip[1]=10.171.0.10
ip[2]=10.171.0.11
ip[3]=10.171.0.12
ip[4]=10.171.0.13
ip[5]=10.171.0.14
ip[6]=10.171.0.15
ip[7]=10.171.0.16
ip[8]=10.171.0.17
ip[9]=10.171.0.18
ip[10]=10.171.0.19
ip[11]=10.171.0.20
ip[12]=10.171.0.21
ip[13]=10.171.0.100
ip[14]=10.171.0.101
ip[15]=10.171.0.102
ip[16]=10.171.0.103
ip[17]=10.171.0.104
ip[18]=10.171.0.105
ip[19]=10.171.0.106
ip[20]=10.171.0.107
case $1 in
kill) function=kill_tarts;;
launch) function=launch_tarts;;
setup) function=tarts_setup;;
*) exit 1;;
esac
shift
for tart in "$@"; do
($function $tart) &
ips =(${ip[tart]})
# echo $ips
tarts =(${tart[@]})
# echo $tarts
done
wait
有人可以指導嗎?
uj5u.com熱心網友回復:
嘗試將底部回圈更改為:
for ((tart=1; tart<=$2; tart )),然后使用 like:./testing.sh launch 8。您可以在一行中放置多個變數宣告,因此您可以將 ip 串列分成兩列或三列。
或者使用 mapfile:
mapfile -t ip < ip-list。您將需要使用tart - 1陣列索引,例如"${ip[tart-1]}",因為陣列將從 0 開始,而不是 1。
uj5u.com熱心網友回復:
你想要seq命令:
for x in $(seq 5); do
echo $x
done
這將產生輸出
1
2
3
4
5
然后只需將您想要的迭代次數作為命令列上的另一個引數,并使用它代替5我的示例中的硬編碼。
seq只生成一個數字序列。從手冊頁:
大綱
seq [-w] [-f 格式] [-s string] [-t string] [first [incr]] last描述
seq 實用程式列印一個數字序列,每行一個 >(默認值),從第一個(默認值 1)到盡可能接近最后一個,以 >incr 的增量(默認值 1)。當 first 大于 last 時,>default incr 為 -1。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/353236.html
