2021-05-12 14:32:11
Linux Shell指令碼入門學習系列
看標題大家應該知道,這是一個關於 Linux Shell 指令碼的系列文章。通過本系列文章希望幫助 Linux 初學使用者快速開始上手編寫 Shell 指令碼,能夠利索的對指令碼進行測試和使用。
在接下來的首篇文章中,我們將介紹什麼是 Shell,有哪些 Linux Shell 型別,什麼是 Shell 指令碼以及如何編開始寫自己的 Shell 指令碼等內容。
什麼是(Unix) Shell
Unix Shell 即大家俗稱的 Shell 是源於 Unix/Linux 的命令列直譯器,使用者在 Shell 中執行的一系列命令都會被 Shell 命令列直譯器直接執行。現代流行的命令列解釋功能都已被內建到 Linux Shell 中進行支援,例如:萬用字元、 管道、 變數、條件操作、 命令及幫助檔案等。簡單來說,我們可以把 Linux 理解為使用者與 Linux 作業系統進行互動的一個介面。
常見Shell型別
Linux 中的各種 Shell 型別有很多,但 Bourne Shell 和 C shell 應用最為廣泛,事實上 Bourne Shell 已經成為 Shell 附加功能及一些衍生功能的編碼基礎。
- Bourne Shell:Bourne shell 又名 sh,在 Linux 中的標準路徑為 /bin/sh,它由 Stephen Bourne 編寫建立,其之所以如此出名是因為 sh 作為其它 Shell 的大量符號/硬連結而存在。(Bourne Shell 的 License 仍在討論中。)
- C Shell:C Shell 又名 csh,由 Billy Joy 編寫建立並被 BSD Unix 廣泛使用。C Shell 引入許多功能來完善互動,如:別名,歷史操作,任務控制等。它完全由 C 語言寫成,並使用 BSD license。
- Fish:Fish 是友好人機互動的代表,它改變了使用者與 Linux Shell 在通用變數、友好錯誤資訊、Tab 補全、語法高亮、智慧終端和剪貼簿處理等方面的互動方式。(Fish 基於 GPL v2)
- Bourne-Again Shell:作為 GNU 專案的一部分,Bourne-Again Shell 是目前大多數 Linux 發行版和 Mac OS X 預設使用的 Shell。(它主要由 C 語言寫成並基於 GPLv3 發布)
其它不太常用的 Linux Shell 還包括:
- Debian Almquist shell 別名 dash
- Korn Shell 別名 ksh
- Z shell 別名 zh
- Busybox
- ……
什麼是Shell指令碼
Shell 指令碼主要由 Linux Shell 解釋執行,可被用於自動化的程式執行、檔案操作、環境設定等任務,Linux 管理員通常使用 Shell 指令碼來執行一些重複性的體力勞動。
Shell 指令碼可將多個要執行的命令和任務提交到 Linux Shell 自動執行,而無需使用者手動觸發。你還可以在單個指令碼中將一個命令的輸出定義為另一個命令的輸入。
總的來說,Shell 指令碼編寫是 Linux 管理員節省時間和資源的必備技能。
如何編寫Shell指令碼
在新手階段,我們比較建議大家使用 gedit、vi/vim、nano 或 Emacs 來編寫 Shell 指令碼,而不要使用其它 IDE 編輯器。Bash 指令碼必需以如下程式碼作為首行:
#!/bin/bash
上述字元中的 #! 被稱為 shebang,後面跟的 /bin/bash 表明要使用 /bin/bash 來執行。除首行(意義特殊)用於指定指令碼型別外,其餘以 # 打頭的內容會被當作注釋被 Shell 忽略執行。
指令碼寫成後,你可將該檔案儲存成任意擴充套件名甚至無擴充套件名,但業界公認慣例以 .sh 作為 Linux Shell 指令碼的擴充套件名,建議大家也別搞特殊。而且要在賦予指令碼執行許可權之後才能被執行,建議大家採用 775 許可權,千萬不要 777:
chmod 755 linuxidc.sh
編寫首個Shell指令碼
開啟你使用的文字編輯器,貼上如下內容:
#!/bin/bash
echo "Hello World!"
將其儲存成 linuxidc.sh 再執行看看效果:
linuxidc@linuxidc:~$ cd 桌面
linuxidc@linuxidc:~/桌面$ chmod 755 linuxidc.sh
linuxidc@linuxidc:~/桌面$ ./linuxidc.sh
Hello World!
執行成功了,是不是非常簡單。
下面我們再建立一個 linuxidc.sh 並黏入如下內容:
- #!/bin/bash
- echo "What is your name?"
- read a;
- echo "Hey $a! what is your Favorite Website?"
- read b;
- echo -e "That's Nice to know @$a that $b is your favorite Website"
大家看看執行之後發生了什麼呢?
linuxidc@linuxidc:~/桌面$ ./linuxidc.sh
What is your name?
linuxidc.com
Hey linuxidc.com! what is your Favorite Website?
www.linuxidc.com
That's Nice to know @linuxidc.com that www.linuxidc.com is your favorite Website
- echo 後的「What is your name?」進行了正確輸出,隨後你輸入的名字被存到了變數 a 當中,讓命令可以從檔案描述符中進行讀取。
- echo 後跟的 「Hey $a! what is your Favorite Website?」中的 $a 變數進行了賦值輸出,並將輸入的網址存入了變數 b,在第三行進行輸出。
如此簡單!開始上手的感覺非常良好?在 Linux Shell 指令碼系列的後續文章中,我們將逐步深入,希望大家玩得開心。
本文永久更新連結地址:http://www.linuxidc.com/Linux/2016-04/130123.htm
相關文章