我試圖執行一個非常簡單的程序(圓號碼最小整數由15整除),但我得到一個錯誤生成錯誤與sh cache.sh
呼籲bash腳本的if語句和變量賦值
我覺得我跟着我學到的語法here但我得到line 9: syntax error: unexpected end of file
我在這裏得到了什麼錯?
我試圖執行一個非常簡單的程序(圓號碼最小整數由15整除),但我得到一個錯誤生成錯誤與sh cache.sh
呼籲bash腳本的if語句和變量賦值
我覺得我跟着我學到的語法here但我得到line 9: syntax error: unexpected end of file
我在這裏得到了什麼錯?
它看起來像你轉換這個fr ü一些其他語言。這是一個可用的bash版本。
#!/bin/bash
min=$(date +"%M")
if [ $(($min % 15)) != 0 ] ; then
min=$((min - min % 1))
fi
echo $min;
本地輸出:
~/tmp › sh ./test.sh
34
該腳本是無效的bash語法。我會首先找到一些工作示例,也許是整個教程。您可以從William Shotts的書開始,該書是available online。
你嘗試一些注意事項:
的$
是使用其值設置爲要求更換可變。它不是變量名稱的一部分,因爲它在Perl或PHP中。所以它不在任務的左側使用。
該shell主要用於運行其他可執行文件,並通過該鏡頭解釋所有內容。如果命令行看起來像是另一個程序的調用,那麼shell將嘗試運行其他程序,而不是執行任何shell-scripty。因此,命令min = date +"%M"
將導致shell尋找名爲min
的程序並使用三個命令行參數執行它:=
,date
和+%M
。
爲了讓作業被識別,=
周圍不能有空間。
但是沒有空格,min=date +"%M"
仍然不正確。 shell會暫時將字符串「date」分配給變量min
,然後嘗試運行一個名爲+%M
的命令。
如果一個值中有空格,則需要在其周圍有引號。
即使使用引號,min="date +%M"
也會將文字字符串「date +%M」分配給min
。如果您確實想要運行命令date +"%M"
並將其輸出用作值,則必須使用命令替換語法$(...)
來請求它。在這裏,我們的朋友美元符號再次請求動態值替換,但括號使它成爲不同類型的請求;而不是變量的值,該表達式被命令的輸出替換。
由於上面提到的解析問題,內置的算術運算只能在特定的上下文中使用。創建有效算術語境的兩種方法是((
... ))
特殊格式和let
命令。
最後,即使您的腳本語法上有效,但如果您的目標是向下舍入到最接近的15的倍數,則它在語義上不正確。除以1後的餘數始終爲零,因此腳本以試圖從min
減去0,並且無論如何不會對結果做任何處理,因爲沒有任何任務返回到min
。如果你想要捨去,你必須減去你剛纔測試的餘數。你可以做這樣的:
min=$(date +%M)
let rem=min%15
if ((rem != 0)); then
let min-=rem
fi
echo $min
但你也可以做多一點簡潔:
echo $((min=$(date +%M), min-=min%15))
這工作沒有if
因爲減去0是無害的。逗號只是讓我們把兩個表達式放在一組((...))
之內。第二個表達式min-=min%15
是一個修改賦值 - 它意味着與min=min-min%15
相同,但爲我們節省了輸入「min」的一個實例。把我們的朋友替換請求$
在((
... ))
前導致整個表達式被其值替換,以便echo
得到某些東西打印出來。表達式列表的值是最後一個表達式的值,並且賦值的值與分配的值相同,所以echo
ed的結果與$min
的最終值相同:最接近小時後15分鐘的多倍。
在shell的術語中,變量實際上被稱爲「參數」。在閱讀文檔時,請牢記一點。
你居然不需要在爲此命令%M
周圍引號。 shell中的所有內容都自動成爲一個字符串;你不需要引號來使它成爲一個。但是,它們並沒有受到傷害,並且在事物周圍添加引號是一個很好的習慣,因爲它可以防止代碼被輸入值中意外的特殊字符破壞。
非常感謝,這確實是很多信息。您的第一個代碼片段會產生錯誤「第6行:語法錯誤:文件意外結束」。我真的不明白第二個例子中發生了什麼,但它沒有返回值。 – 1252748
@thomas我剛剛證實,這兩個例子都適合我,從這裏複製並粘貼到我的終端窗口中。不過,我做了一些編輯,所以請仔細檢查。 –
min=`date +"%M"`;
if [ $min%15 != 0 ]
then
min=$((min - min%1))
fi
echo $min;
我認爲在看bash示例時很重要的一件事是*每個單獨的字符*都很重要。特別是空間。而缺乏空間。 – Aesin