大家好,我是IT菜鳥,走的是MIS的路,想要學習shell scriptS做自動化
自己沒有寫程式的經驗.只寫過很簡單的asp.html.php
請問我該如何下手學起?
shell script只有linux有嗎?windows有shell scripts嗎?
在 Linux 上有很多種 Shell, 其中 Bash 應該是最常見的
在 Windows 上也有 Power Shell
在 Windows 上使用 Shell 難度相對高一些些,我覺得應該是我已經習慣在 Windows 上用滑鼠滑來滑去吧
在 Linux 上的,就是把你要輸入的指令全部輸入進去到一個檔案中,並且讓這個檔案可以執行,這個就是最簡單的 shell 了
在更進一步的說,在 Sell 中還可以使用變數,if...else, while, for ...等功能完成我們所要做的事情。
所以想學 shell 最快的方是就是讓自己又懶又勤勞,懶的是做每一件事情可以輸入一個指令完成就不要輸入兩個指令,可以輸入兩個完成就不要輸入三個。
勤勞的是,當完成一件工作,就先把這個工作的所有指令放到一個檔案去執行看看,可行的話,在想想怎麼加變數,加判斷式讓這個 script 可以讓下次工作也可以使用。
舉例來說,如果我有三台 android 的手機,我想用 adb 指令讓他們重開機,我可能要輸入以下指令:
<pre class="c" name="code">
adb -s 序號1 reboot
adb -s 序號2 reboot
adb -s 序號3 reboot
因此我可以把三個指令放到一個檔案 rebootAlldevice.sh 中,爾後每次只要輸入 ./rebootAlldevice.sh 就會重開三台手機了。
接著,就像寫程式一樣,這樣雖然方便,可是不是很好的作法,因為重複的指令超過三次
因此我可以利用 for 這個判斷式減少重複的指令,再把目前這些手機重開機
<pre class="c" name="code">
for DEVICE in 序號1 序號2 序號3
do
echo "對 $DEVICE 執行重新開機指令"
adb -s $DEVICE reboot
done
可是,序號還是寫死阿~~
所以,我們還可以想個方式讓序號不要寫死
<pre class="c" name="code">
for DEVICE in `adb devices | awk '{print $1}' | sed -n '1d'`
do
echo "對 $DEVICE 執行重新開機指令"
adb -s $DEVICE reboot
done
其中:
<pre class="c" name="code">
awk '{print $1}': 表示我使用第一個 column
sed -n '1d' : 表示我要把第一row 刪掉
指令1 | 指令2 :這樣表示把只另1的結果當成指令2的輸入
因為 adb devices 產生的結果像這樣子
<pre class="c" name="code">
List of devices attached
序號 devices
序號 devices
...
序號 devices
所以去第一欄並刪除第一列,剩下的不就全部都是序號了嗎
以此類推,你很快就會學會在 linux 下的 shell 了。
至於 windows, 理論上應該也是啦!!雖然我不會,不過你可以去查查 power shell 應該會有很多資料!