任何代碼會在野外被釋放應具有以下短標題:
# Script to turn lead into gold
# Copyright (C) 2009 Joe Q Hacker - All Rights Reserved
# Permission to copy and modify is granted under the foo license
# Last revised 1/1/2009
保持更改日誌中的代碼頭去,是從當版本控制系統是非常不方便的一個倒退。最後一次修改日期顯示某人腳本有多大年紀。
如果您打算依賴bashisms,請使用#!/ bin/bash而不是/ bin/sh,因爲sh是任何shell的POSIX調用。即使/ bin/sh指向bash,如果通過/ bin/sh運行它,許多功能也將被關閉。大多數Linux發行版都不會採用依賴bashisms的腳本,而是嘗試移植。
對我來說,在shell腳本的意見是有點傻,除非他們讀的東西,如:
# I am not crazy, this really is the only way to do this
shell腳本,就是這麼簡單,(除非你寫一個示範,教別人如何做到這一點)的代碼幾乎總是消除自己。
一些shell不喜歡被輸入的「本地」變量。我相信到今天,Busybox(一種常見的救援外殼)就是其中之一。改爲使用GLOBALS_OBVIOUS,它更容易閱讀,尤其是在通過/ bin/sh -x ./script.sh進行調試時。
我個人的偏好是讓邏輯爲自己說話,並儘量減少解析器的工作。例如,許多人可能會這樣寫:
if [ $i = 1 ]; then
... some code
fi
在哪裏,我正:
[ $i = 1 ] && {
... some code
}
同樣,有人可能會這樣寫:
if [ $i -ne 1 ]; then
... some code
fi
...這裏我倒是:
[ $i = 1 ] || {
... some code
}
我唯一使用傳統的if/th如果還有其他 - 如果投入混合,en/else。
只需在大多數使用autoconf的免費軟件包中查看'configure'腳本,就可以研究非常好的可移植shell代碼的一個令人毛骨悚然的例子。我說瘋了,因爲它的6300行代碼滿足了人們熟知的每個系統都有類似於UNIX的UNIX系統。你不想要那種臃腫,但研究一些內部的各種可移植性攻擊是很有趣的,比如對那些可能指向/ bin/sh的人來說zsh :)
唯一的其他建議我可以給你看看你的擴展在這裏,文檔,即
cat <<EOF> foo.sh
printf "%s was here" "$name"
EOF
...將擴大$ name,當你可能想離開變量的地方。解決這個通過:
printf "%s was here" "\$name"
這將離開$ name作爲變量,而不是擴大它。
我也強烈建議學習如何使用陷阱捕捉信號..並利用這些處理程序作爲樣板代碼。通過一個簡單的SIGUSR1告訴一個正在運行的腳本是非常方便的:)
我編寫的大多數新程序(它們都是面向工具/命令行的)最初都是作爲shell腳本開始的,它是一種用於UNIX工具原型的好方法。
您可能還喜歡SHC shell腳本編譯器check it out here。
作者(s)?更新日誌? 獲取版本控制系統! – derobert 2009-01-10 06:04:18