2013-11-28 30 views
0

我已經進入這個shell腳本及其編譯以下Unix shell腳本有什麼問題?

echo Enter basic Salary 
read bs 
if [ $bs -lt 1500 ] 
then 
hra= echo ´$bs \* 10/100´|bc 
fi 
gs= echo ´$bs + $hra´|bc 
echo $gs 

時顯示錯誤的錯誤是:

(standard_in) 1: illegal character: \302 
(standard_in) 1: illegal character: \264 
(standard_in) 1: illegal character: \302 
(standard_in) 1: illegal character: \264 
(standard_in) 1: illegal character: \302 
(standard_in) 1: illegal character: \264 
(standard_in) 1: illegal character: \302 
(standard_in) 1: illegal character: \264 
(standard_in) 2: syntax error 
+1

Nonfloating算術最好做到了這一點方式:'hra = $((bs * 10/100))'(稱爲*算術擴展*)。不需要額外的過程。 –

回答

1

的一個問題是(或者說,4個問題)代替使用´'"

書中有另一個字符也造成麻煩,除非急性口音在UTF-8或UTF-16 編碼†

的另一個問題是使用周圍分配空間;這些不會在殼中飛行。作業任何一方都不能有空格。

echo Enter basic Salary 
read bs 
if [ "$bs" -lt 1500 ] 
then hra=$(echo "$bs * 10/100"|bc) 
fi 
gs=$(echo "$bs + $hra"|bc) 
echo $gs 

你並不需要變量gs;你可以寫:

echo "$bs + $hra" | bc 

注意,如果bs不低於1500,你會得到一個hra不明確的值(無論發生什麼事要留下來,或者如果它未設置爲空)。

它看起來像你有UTF-8編碼數據。

$ echo "´" | odx 
0x0000: C2 B4 0A           ... 
0x0003: 
$ echo "´" | utf8-unicode 
0xC2 0xB4 = U+00B4 
0x0A = U+000A 
$ bc | cat 
ibase=16 
obase=8 
C2 
302 
B4 
264 
quit 
$ 

U + 00B4是Unicode中的ACUTE ACCENT。

+0

+1,另一個問題是變量必須用雙引號:'「$ bs」',除非極少數情況。 –

+0

@JoSo:是的,看到我幾乎與你的評論同步發佈的更新。 –

0

了太多的錯誤:

  1. 正如喬納森代替`指出,使用「。
  2. 將值分配給變量時不要使用空格。
  3. 在將數據分配給變量前先創建數據。

例如, hra = echo $bs \* 10/100|bc

另外,如果輸入超過1500,則會發出錯誤。所以你需要用它做點什麼。

例如, 回聲 「輸入基本工資」 讀BS 如果[$ BS -lt 1500] 然後 HRA = echo $bs \* 10/100|bc 否則 HRA = echo $bs \* 5/100|bc 網絡 GS = echo $bs + $hra|bc 回聲$ GS