iT邦幫忙

0

想學習shell scripts該如何下手?

qy999q 2013-08-15 17:38:1913502 瀏覽

大家好,我是IT菜鳥,走的是MIS的路,想要學習shell scriptS做自動化
自己沒有寫程式的經驗.只寫過很簡單的asp.html.php

請問我該如何下手學起?
shell script只有linux有嗎?windows有shell scripts嗎?

fillano iT邦超人 1 級 ‧ 2013-08-15 18:23:13 檢舉
剛剛想到:<<bash shell 入門 第三版>>這本...但是看到......絕版了...絕版了...絕版了...........XD

沒事可以`info bash`一下,裡面東西很豐富。

另外,/etc下面有很多系統啟動與服務等相關的script,幾乎都是Bash寫的,也可以參考。
duy iT邦新手 5 級 ‧ 2017-06-08 09:22:23 檢舉
建議直接學bash跳過Windows power shell, 因為連Windows都要開始擁抱bash了. 但純正的bash還是在linux下學比較好. 我在天瓏有有買一本Linux Shell腳本攻略,簡體中文的可以找看看

2 個回答

14
pajace2001
iT邦研究生 1 級 ‧ 2013-08-16 09:40:12
最佳解答

在 Linux 上有很多種 Shell, 其中 Bash 應該是最常見的
在 Windows 上也有 Power Shell

在 Windows 上使用 Shell 難度相對高一些些,我覺得應該是我已經習慣在 Windows 上用滑鼠滑來滑去吧

在 Linux 上的,就是把你要輸入的指令全部輸入進去到一個檔案中,並且讓這個檔案可以執行,這個就是最簡單的 shell 了

在更進一步的說,在 Sell 中還可以使用變數,if...else, while, for ...等功能完成我們所要做的事情。

所以想學 shell 最快的方是就是讓自己又懶又勤勞,懶的是做每一件事情可以輸入一個指令完成就不要輸入兩個指令,可以輸入兩個完成就不要輸入三個。

勤勞的是,當完成一件工作,就先把這個工作的所有指令放到一個檔案去執行看看,可行的話,在想想怎麼加變數,加判斷式讓這個 script 可以讓下次工作也可以使用。

舉例來說,如果我有三台 android 的手機,我想用 adb 指令讓他們重開機,我可能要輸入以下指令:

&lt;pre class="c" name="code">
adb -s 序號1 reboot
adb -s 序號2 reboot
adb -s 序號3 reboot

因此我可以把三個指令放到一個檔案 rebootAlldevice.sh 中,爾後每次只要輸入 ./rebootAlldevice.sh 就會重開三台手機了。

接著,就像寫程式一樣,這樣雖然方便,可是不是很好的作法,因為重複的指令超過三次
因此我可以利用 for 這個判斷式減少重複的指令,再把目前這些手機重開機

&lt;pre class="c" name="code">
for DEVICE in 序號1 序號2 序號3
do
   echo "對 $DEVICE 執行重新開機指令"
   adb -s $DEVICE reboot
done

可是,序號還是寫死阿~~

所以,我們還可以想個方式讓序號不要寫死

&lt;pre class="c" name="code">
for DEVICE in `adb devices | awk '{print $1}' | sed -n '1d'`
do
   echo "對 $DEVICE 執行重新開機指令"
   adb -s $DEVICE reboot
done

其中:

&lt;pre class="c" name="code">
awk '{print $1}': 表示我使用第一個 column
sed -n '1d'     : 表示我要把第一row 刪掉
指令1 | 指令2 :這樣表示把只另1的結果當成指令2的輸入

因為 adb devices 產生的結果像這樣子

&lt;pre class="c" name="code">
List of devices attached
序號  devices
序號  devices
...  
序號  devices

所以去第一欄並刪除第一列,剩下的不就全部都是序號了嗎開心

以此類推,你很快就會學會在 linux 下的 shell 了。

至於 windows, 理論上應該也是啦!!雖然我不會,不過你可以去查查 power shell 應該會有很多資料!

10
一級屠豬士
iT邦高手 1 級 ‧ 2013-08-15 17:43:05
kilokw iT邦新手 5 級 ‧ 2013-08-18 17:04:12 檢舉

說真的很多時候沒常用的話一下就忘光了

我要發表回答

立即登入回答