bash 迴圈語法錯誤 - Linux

Hedda avatar
By Hedda
at 2009-12-29T11:51

Table of Contents

※ 引述《deepking (wnuiayldh)》之銘言:
: #!/bin/bash
: for (( i=1; i<=10; i++ )) =>> 這行 Bad for loop variable
: do
: echo $i
: done
: 看鳥哥上的語法就這個樣子
: 請問是錯在哪裡阿

A. 解決方式一: 使用 bash 啟動 script
bash test.sh

B. 解決方式二: 改寫 script, 使其可同時與 bash 與 dash 共通
---------- 以下的迥圈可同時相容 bash 及 dash ----------
#!/bin/sh
i=1
while [ $i -le 10 ];do
echo $i
i=$(($i + 1))
done
-------------------------------------------------------
註一: for ((i=1;i<=10;i++)) 只適用於 bash.
註二: 下例對於 i = i + 1 的用法, 只適用於 bash, 不適用 dash
1) ((i++))
2) i=$((i + 1))
註三: 下例對於 i = i + 1 的用法, 可同時相容於 bash 及 dash
1) i=$(($i + 1))
2) i=`expr $i + 1` --> 這寫法可同時相容於 busybox 的 ash

C. 檢查 script 的相容性:
使用 checkbashisms 來檢查你寫的 script 是否可同時相容於 bash
及 dash, 用法如下:

Terry:~/prog/script# checkbashisms for_bash.sh
possible bashism in for_bash.sh line 2 ('((' should be '$(('):
for (( i=1; i<=10; i++ ))

至於 bash 和 dash 語法上的差異, 可以參考下列網址:
http://princessleia.com/plug/2008-JP_bash_vs_dash.pdf

--
Tags: Linux

All Comments

Frederic avatar
By Frederic
at 2009-12-30T02:55
謝謝

ncu的sourceforge mirror何時才會修好?

Anonymous avatar
By Anonymous
at 2009-12-29T11:41
ncu的sourceforge mirror已經壞掉大約..半年了吧? 不知何時才會修好.. 也找不到聯絡方式,不知道怎麼去找管理者聊聊...orz 有人有任何資訊的嗎? 實在是很受不了...ccc - ...

請問tcpdump跟awk這個指令

Callum avatar
By Callum
at 2009-12-29T09:09
: : 我想要請問tcpdump是否可以一邊監控封包 : : 一邊得知在傳送的過程中是否有封包漏掉的情形 : : 又是在哪一段漏掉的,掉了多少封包? : 這有點難 : tcp 還有機會 , : 檢查各 connection 的 seq/ack num 對應 , : 不過就算漏了 , tcp 也會做 retra ...

請問tcpdump跟awk這個指令

Franklin avatar
By Franklin
at 2009-12-29T04:31
※ 引述《who4 (哥哥最愛獅子丸了)》之銘言: : 我想要請問tcpdump是否可以一邊監控封包 : 一邊得知在傳送的過程中是否有封包漏掉的情形 : 又是在哪一段漏掉的,掉了多少封包? 這有點難 tcp 還有機會 , 檢查各 connection 的 seq/ack num 對應 , 不過就算漏了 , ...

請問安裝套件會影響到其他人嗎?

Susan avatar
By Susan
at 2009-12-29T03:38
※ 引述《fatboy (胖孩子)》之銘言: : 有一台共用的電腦 : 我想要安裝一個軟體,假設是cscope好了 : 那我安裝了會影響到其他人的使用嗎? 就... 別人也可以用啊 XD : 另外就是,要怎麼知道想安裝的軟體是否已經安裝到電腦上了呢? 用你的發行版的套件管理程式查 不過以現在rpm和deb兩 ...

請問tcpdump跟awk這個指令

Doris avatar
By Doris
at 2009-12-29T01:27
※ 引述《who4 (哥哥最愛獅子丸了)》之銘言: : 上網查了一下,BEGIN是做初始化的動作 : 但是後面的substr(), length($8), srand(), FNR,實在是超出我能理解的範圍 substr 從給定字串中取出它的一部分 length 字串長度 srand 亂數 FNR 不曉得,應 ...