一、什麼是 Shell? 狹義的shell指的是指令列方面的軟體,包括基本的Linux操作視窗Bash等,廣義的shell則包括 圖形介面的軟體,因為圖形介面其實也可以操作各種驅動程式來呼叫核心進行工作。 系統合法的 shell 均寫在 /etc/shells 文件中。 二、Bash Shell 的 ...
一、什麼是 Shell?
狹義的shell指的是指令列方面的軟體,包括基本的Linux操作視窗Bash等,廣義的shell則包括 圖形介面的軟體,因為圖形介面其實也可以操作各種驅動程式來呼叫核心進行工作。
系統合法的 shell 均寫在 /etc/shells 文件中。
二、Bash Shell 的基本操作技巧
1、查看前一次登錄執行過的命令:vim ~/.bash_history 2、命令和文件補全功能(Tab鍵) tab 接在一串指令的第一個字後面,則為命令補全 tab 接在一串指令的第二個字後面,則為文件補全 3、命令別名設定功能:alias alias lm='ls -al' 4、程式化腳本(shell scripts) 5、通配符
- && 前一個指令必須沒有錯誤信息
- || 如果正確就不執行第二條。錯誤接著執行第二條

- 變數和變數內容以一個等號=連接,a=123
- 等號兩邊不能直接接空格符
- 由英文字母和數字組成,但開頭不能是數字
- 變數內容中如果有特殊字元,可以用""或''將變數內容結合起來
- " "中 $變數,可以保留原本的特性
- ' ' 中$變數,當成一般字元來處理
- 可以用跳脫字元 \ 來使不認識的特殊字元來當成一般字元
- ``或者()的意義:``或者()裡面的指令先被執行,作為外部的輸入信息
- 將 - 變成 + 可以進行[取消]動作:declare +x sum :
- 單獨列出變數的類型:declare -p sum
- 升級成環境變數:export PATH
- 取消變數 :unset a
- 數組定義:var[1]="123" var[2]="456" var[3]="789"
- ``或者()的意義:``或者()裡面的指令先被執行,作為外部的輸入信息
- 變數 $$:出現的數字就是你的PID號碼
- 變數 ?:上一個錯誤指令的錯誤代碼,如果沒有錯誤就為0
變數交互:read -p "請輸入你的名字:" -t 30 name (-p表示提示世界,-t 表示30秒的輸入時間) 變數內容的擴展:PATH="$PATH":/home/bin 變數內容的刪除:echo ${path#/*:} 這句話的意思是從/開始到:之間刪除掉最短的字元

變數內容的替換:

執行: 1、直接絕對路徑和相對路徑執行,執行者必須要有腳本的執行許可權。 2、全局變數的話 可以通過 bash shell.sh 或 sh shell.sh來執行 source、 sh script 的執行方式差異? sh script 或者 bash script 都會使用一個新的bash環境來執行腳本中的命令,當子程式完成後,子程式完成後,在子程式內的各個變數或者動作將會結束而不會傳回父程式中 source script 會在父程式中執行,因此各項動作都會在原本的bash 內生效 流程式控制制(順序):shell scripts 依照 從上到下、從左到右 的順序執行。 流程式控制制(條件):
- test -e file 文件名是否存在
- test -f file 文件名是否存在 且為file
- test -d directory 文件名是否存在且為目錄
- test -r -w -x filename 是否具有可讀可寫可執行的許可權
- test n1 -eq n2 兩數值相等
- test n1 -ne n2 兩數值不等
- -gt n1大於n2
- -lt n1小於n2
- -ge 大於等於
- -le 小於等於

腳本的變數交互還可以用 ${0}、${1}、${2}、${3} 來進行,${0} 表示執行的腳本名、${1} 表示輸入的第一個變數、${2}表示輸入的第二個變數、${3} 表示輸入的第三個變數
if 條件判斷
case 條件判斷

流程式控制制(迴圈):
while 迴圈
for 迴圈
for 迴圈
函數:
註意點:和傳統語言不同,函數必須定義在腳本最前面,以便程式執行的時候可以認識函數。函數 形參 也是用${1}、${2}、${3} 來傳參,也就是說函數內的${1}/${2}/${3} 辨認的調函數時傳進去的實參。而不是 執行腳本傳遞時的參數