Re: [問題] bash程式設計小問題!!

看板Linux作者 (呆呆小狼￾ ￾ N￾ ￾ )時間15年前 (2008/09/01 17:37), 編輯推噓3(3010)
留言13則, 4人參與, 最新討論串3/4 (看更多)
※ 引述《fu0653 (fu0653)》之銘言: : 想請問像下面簡單的1加到100 : #!/bin/bash : s=0 : for (( i=1; i<=100; i=i+1 )) : do : s=$(($s+$i)) : done : echo "The result of '1+2+3+...+100' is ==> $s" 先把上面的檔案存成 a.sh 然後寫一個 b.sh #!/bin/sh a.sh& echo B is end 存起來,然後RUN B 看看 : 原本只會run一次The result of '1+2+3+...+100' is ==> $s : 那我在這行s=$(($s+$i))後面加上& 變成s=$(($s+$i))& : 這樣子他就會run100次The result of '1+2+3+...+100' is ==> $s : 是這樣子的意思嗎?? 不會,會直接發生錯誤。因為& 是RUN一個新的PROCESS,包括一個新的環境。 SH的變數不會傳過去,要傳過去需要用引數或SH的繼承參數才能傳到新的程式 裡面。你這行指令沒頭沒尾,而且還是變數操作。結果就會變成什麼都沒作。 : → fu0653:哈哈~但是照WolfLord大大說的,的確是我想要的結果!! 09/01 16:51 要搞KUSO要講清楚,不然真的想學的人就慘了。 : → fu0653:不是啦!!我自己也試不出來= =,只是我想要的結果另開執行 09/01 17:02 : → fu0653:序執行不等待其結束,目前也是還不會!! 09/01 17:02 : → fu0653:怎麼試都不行ˋˊ 09/01 17:15 試試看: #!/bin/sh ls -al& route & netstat -alp& ps -aux --cols512 & echo batch is done -- ~~~ 一切的正義在曼尼大神的正義之前均無足輕重 在海賊的砲口下唯有曼尼大神的正義可以私下研究 ~~~ -= WolfLord =- BM4GMR - A23203 - -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.231.104

09/01 17:42, , 1F
科科...最後這幾行一下應該會洗到看不見batch is done吧??
09/01 17:42, 1F

09/01 17:49, , 2F
...經cygwin實驗...會頓蠻久才繼續...是cygwin的問題嗎?
09/01 17:49, 2F

09/01 17:50, , 3F
自問自答...的確是...cygwin的bash會頓一下
09/01 17:50, 3F

09/01 17:54, , 4F
重點是有沒有抓到&到底是什麼的FU了?
09/01 17:54, 4F

09/01 18:03, , 5F
我知道啊~只是好奇這..可以同步化嗎? 還是搞不懂原po需求
09/01 18:03, 5F

09/01 18:11, , 6F
我沒有想搞笑呀= = 我也是認真想學 所以試了&用法
09/01 18:11, 6F

09/01 18:19, , 7F
加 & 表示背景執行, 你可以想像 bash本身是一個程式,它只是
09/01 18:19, 7F

09/01 18:20, , 8F
謝謝WolfLord我懂了&的用法,你多執行幾次b.sh就會了解!!
09/01 18:20, 8F

09/01 18:20, , 9F
一直等你的輸入並呼叫執行你輸入的指令, 而如果你的指令有
09/01 18:20, 9F

09/01 18:21, , 10F
加 & 於指令的尾端,則 bash 會fork一個新的 thread 並回到
09/01 18:21, 10F

09/01 18:22, , 11F
bash 等你的下一個指令
09/01 18:22, 11F

09/01 18:24, , 12F
那如果for迴圈裡面執行wget,想讓wget並行此方法能做到嗎??
09/01 18:24, 12F

09/01 18:48, , 13F
可以,不過我通常會用另一個SH去叫WGET,確保WGET成功
09/01 18:48, 13F
文章代碼(AID): #18kxVijF (Linux)
文章代碼(AID): #18kxVijF (Linux)