shell script寫作札記

DATE: 06/02/2004 02:12:36 PM

在台灣大多都是使用M$的系統
需要動手寫shell script的地方其實不多
再加上 大多數從業人員都是長期接觸WINDOWS
早就習慣了要手動作一堆事情
對於需要動手也不以為意
對老闆來說
人力又不貴 找個人來專門打指令似乎也無所謂

但是對於想進一步提升專業能力的人來說
練習寫shell script是非常重要的
因為在撰寫script的過程中
會對於整各系統的結構更有通盤而深刻的了解

在目前linux流行的環境下
最常見的shell是bash (bourne again shell)
(請別問出為啥縮寫成四各自母這種問題來? 我真的不懂這類的幽默)
市面上目前能找到最好的參考書是歐萊禮的bash shell入門(中文版)

不過書中寫的其實有點高深
一般最常用的script其實是非常簡單的
我們可以形容他是 => 一連串的指令
我會這樣說其實是因為
shell script跟一般軟體最大的不同在於
script是由小到大
而不是由大到小

寫script最大的動機來自於懶惰
而不是想創造什麼新的炫的東西
所以 最初的script一定是連接數個指令以減少指令的輸入動作
或是為了排程需要(半夜或假日不需要跑到電腦前打字)

不過事情總是會像這樣發展
當你寫了10行的小script避免掉假日要大老遠跑一趟之後
就會想再寫10行讓你上班時間也不需要打指令
這個時候就會需要用到流程控制的觀念
也就是判斷式
if [ -e $FILENAME ]; then
cat $FILENAME
fi
(意思是 當$FILENAME的變數存在 將這檔案內容顯示在螢幕上)

需要注意的是 if 一定要跟 fi
就好像其他語言{後面一定要有}

shell script的語法其實比一般程式語言要簡單許多
困難的地方在於它能允許帶指令參數
而有些時候寫在SCRIPT裡的指令需要額外的參數來完成一樣的工作
比如說用ssh連線到abc.com這台主機做ntpdate對時
這個動作需要abc.com這台機器上的root或sudo權限
如果你直接在script中寫
ssh abc.com ‘sudo ntpdate’
你一定會看到這支script一點錯誤也沒回的停在那裡
(要解釋為什麼其實有點複雜所以留到最後再說)
你必須要在ssh後面多加上一個-t的參數 這個script才能正確運作
(-t的意義是 => 在連線之前就要求密碼)
再寫script的時候man是最重要的幫手
因為你可能需要呼叫一些非公用程式像是協力廠商所寫的程式之類
如果看不懂 那就只能多問了
(對推廣LINUX來說 中文的MAN翻譯計畫應該要盡快完成)

最後來解釋一下為什麼沒有-t時會沒有錯誤訊息的等在那
shell再執行時會將自己開啟成一個子行程比方說PID1000
這個PID1000的行程再去呼叫相關指令ssh
在前面的例子中 呼叫sudo的是ssh這個指令
sudo會等待他的呼叫者也就是ssh輸入password
當然沒有-t參數的時候ssh不會帶任何密碼
於是script就會陷入漫長的等待之中
因為是在等待輸入 所以也不會回傳錯誤

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s