Discussion:
[問題] 迴圈內變數中的變數問題?
(时间太久无法回复)
Balmung
2015-05-18 11:10:17 UTC
Permalink
首先,小弟我的問題標題實在不知道要怎麼下,傷眼抱歉
如果有十多台電腦想丟同一個檔案上去,電腦的IP不是連續的
小弟我想寫一個腳本先設定變數為各台電腦的IP,變數為連續的
然後用迴圈去帶出個別電腦的IP位址,實在是不知道要如何寫這個變數,
爬文#1Ighf6r6 裡面的變數寫法也都失敗,顯示Bad substitution,
特此來請教各位前輩,感謝。

系統:HP-UX 沒有bash,只能使用sh,故採用while寫法。

程式碼如下:
#!/bin/sh
#set
i=0
ip1=11.11.111.111
ip2=22.22.222.222
ip3=33.33.333.333
ip4=44.44.444.444
ip5=55.55.555.555
#loop
while [ $i -le 4 ]; do
i=$(($i + 1))
echo "$i"
varname=ip$i
echo ${!varname}
done

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.41.31.111
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1431947417.A.87E.html
方塊
2015-05-18 14:50:58 UTC
Permalink
有段時間沒有寫 script 了,不過我的話會把所有 ip 放到一個檔案裡面,

例如 ip_addr.txt,然後用一個變數去抓那隻檔案的內容,大概會像這樣:

---

#/bin/bash

# 把 ip_addr.txt 內所有 ip 存到 ip_addr 這個變數裡面。
ip_addr = `cat ip_addr.txt`

# 下面這個 for 迴圈會一行一行的讀 ip_addr 裡面的值。
for ip in $ip_addr
do
# 再來看你要做什麼,但注意這邊的變數要用 $ip!
do something ...
done

---

※ ip_addr.txt 一行放一個 IP,不然 for 迴圈那邊會出錯,例如:

111.111.111.111
222.222.222.222
333.333.333.333

※ ip_addr.txt 要放在和 script 同一層資料夾,否則要 cat 絕對路徑,例如:

ip_addr = `cat /home/ptt/linux/ip_addr.txt`

之後要增減 ip 只要改 ip_addr.txt 這支檔案就可以了。


更詳細的教學可參考鳥哥的 Linux 私房菜:

http://linux.vbird.org/linux_basic/0340bashshell-scripts.php#for


希望這有幫到你。



--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.240.148.199
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1431960659.A.90C.html
哈馬‧阿里
2015-05-19 00:43:08 UTC
Permalink
## 這樣寫是 bash 和 sh 都可以過的

for i in 111.111.111.111 222.222.222.222;do
echo $i
done




## 當然擠成一行可能不好看,所以可以這樣寫
## 這和前面的文章 list=`cat /path/to/ip`
## 的意思是一樣的,只不過把上面的例子
## 改寫的比較好看

list='
111.111.111.111
222.222.222.222
333.333.333.333
'

for i in $list ;do
echo $i
done




## 如果是 bash ,有陣列可以用
## for 或 while 都可以
## 這也是你一開始的想法

ip=(111.111.111.111 222.222.222.222)

for(( i = 0 ; i < ${#ip[@]} ; i++));do
echo ${ip[$i]};
done

--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 119.14.78.34
※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1431996189.A.B98.html
Loading...