Shell Scripts for迴圈的小問題 - Linux

George avatar
By George
at 2015-09-02T03:15

Table of Contents

※ 引述《SSID2244 (ssid)》之銘言:
: 大家好 最近在學習shell scripts (用在修改大量數據)
: 遇上一個問題,我想寫一個for的多重迴圈 在這裡我先簡化問題為雙迴圈好了
: for ((i=1;i<=5;i=i+1));do
: for ((j=1;j<=5;j=j+1));do
: echo "i=${i},j=${j}"
: done
: done
: bash這個檔案之後
: 會print出總共25個字串 5x5
: 但如果我想要自訂i的起始點,間距以及終點
: 所以我把scripts改寫成
: read -p "i_intial= " i
: read -p "i_intvl= " id
: read -p "i_end= " ied
: read -p "j_intial= "j
: read -p "j_intvl= " jd
: read -p "j_end= " jed
: for ((i=${i};i<=${ied};i=${i}+${id}));do
: for ((j=${j};j<=${jed};j=${j}+${jd}));do
: echo "i=${i},j=${j}"
: done
: done
: 但改寫成這樣之後,他卻只會print出j的迴圈,i的迴圈卻不會work
: 但檢查不出問題出在哪..
: 請大大們幫忙了 謝謝!

程式碼認真說太亂,請改一下這樣比較好閱讀:

read -p "i_intial= " i
read -p "i_intvl= " id
read -p "i_end= " ied
read -p "j_intial= " j
read -p "j_intvl= " jd
read -p "j_end= " jed

for ((i=i;i<=ied;i=i+id));do
for ((j=j;j<=jed;j=j+jd));do
echo "i=${i},j=${j}"
done
done

你的 j=j 是有問題的,因為你每跑過外層迴圈時候 j 已經增加過了,所以
外層迴圈要跑第二次時候 j 早就已經增加到超過 jed 範圍了所以當然不會執行,
因此第二層的迴圈不能夠直接拿 j=... 這種語法來用,請另外產生新的變數紀錄,
比方變成:

read -p "i_intial= " i
read -p "i_intvl= " id
read -p "i_end= " ied
read -p "j_intial= " j
read -p "j_intvl= " jd
read -p "j_end= " jed

for ((i=i;i<=ied;i=i+id));do
for ((new_j=j;new_j<=jed;new_j=new_j+jd));do
echo "i=${i},j=${new_j}"
done
done

另外 ((i=i;i<=ied;i=i+id));do 這個前面多此一舉可以改成:

((;i<ied;i=i+id))

最後提供另外一個版本讓你參考

read -p "i_intial= " i
read -p "i_intvl= " id
read -p "i_end= " ied
read -p "j_intial= " j
read -p "j_intvl= " jd
read -p "j_end= " jed

for n1 in $(seq $i $id $ied); do
for n2 in $(seq $j $jd $jed); do
echo "n1 = $n1 , n2 = $n2"
done
done

--
Tags: Linux

All Comments

Dorothy avatar
By Dorothy
at 2015-09-03T19:28
了解了!!謝謝
Yedda avatar
By Yedda
at 2015-09-04T20:31
read 讀變數的時候不要用 ijk ,ijk 留給迴圈用

USB Disk

Freda avatar
By Freda
at 2015-09-01T22:40
各位大大. 目前我有一個隨身硬碟. 我使用ubuntu 15.04版. 目前插上去自動掛載後 Create a folder 會顯示 Permission died. 想請問各位我應該如何解決? 是否有辦法開機的時候自動mount到可以RW. 不會有Permission問題 感謝各位大大! - ...

Apache2 + Gitlist 問題

Ula avatar
By Ula
at 2015-09-01T18:27
大家好 小弟想在ubuntu 14.04 上架一個gitlist 目前apache2 跟 gitlist 皆已安裝完畢 小弟參考 此文章( http://my.oschina.net/aulphar/blog/201813 ) 但遇到一個問題 開啟網頁 可以看到我上傳的專案 可是只要點進專案 網頁卻顯示 ...

使用 GNU/Linux 做為筆電的 OS

Margaret avatar
By Margaret
at 2015-08-31T18:51
哈哈,大家不用這麼爆氣哦~輕鬆聊天不是很好嗎 www 首先,先來聊聊音訊的問題 確實從播放音訊檔案一直到從硬體輸出經過很多層有點令人詬病 不過到底有多少層呢? 早些年,許多的軟體都直接調用 ALSA(或是OSS) 的 API 來進行聲音的播放 不過很快的問題也漸漸浮現,像是最重要的混音問題 音效卡 ...

VirtualBox 網路斷線

Oliver avatar
By Oliver
at 2015-08-30T23:17
請問各位. 目前我安裝好Virtual Box,系統安裝Ubuntu,並且使用SSH 但是用一段時間,時間沒有固定,會突然產生網路斷線。 我使用NB內建網卡. 想請問各位大大是否有遇過. 感謝感謝~ - ...

windows boot error

Damian avatar
By Damian
at 2015-08-30T20:15
板友好,想請問我的電腦有兩個硬碟分別裝win7跟linux但grub選擇win7啟動後顯示boot error ,而無法啟動win7,而後使用linux的boot repair還是相同情況,可以請問要如何 解決嗎謝謝(開機碟是裝linux的硬碟) (boot repair有顯示win7的boot離物理磁碟讀 ...