天天看點

Linux 學習記錄 四(Bash 和 Shell scirpt).

一、什麼是 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、通配符

Linux 學習記錄 四(Bash 和 Shell scirpt).

6、換行輸入 \ +[enter]

7、從光标向前或者向後删除字元串 [crtl]+u / [crtl] +k

8、從光标移動到整個指令串的最前面/最後面 [crtl] +a / [crtl]+e

9、使用 env 和 export 可觀察環境變量;set 可以觀察目前 bash 環境下的所有變量

10、連續指令中 ; 可以讓兩個指令連續執行:

  • && 前一個指令必須沒有錯誤資訊
  • || 如果正确就不執行第二條。錯誤接着執行第二條

 11、編碼問題:LANG 或者 是 LC_ALL設定; locale 列出目前語種。

 12、檢視别名的原代碼 : type -a 别名指令

 13、列出所有的按鍵和按鍵内容:stty -a

 14、設定按鍵功能:stty erase ^h  : 設定crtl + h 向後删除字元

 15、擷取核心版本:echo $(uname -r)

三、Shell Script

概念:Shell script 是利用shell 的功能 所寫的一個程式,這個程式是使用純文字檔案。将一些 shell 的文法與指令寫在裡面,搭配正規表達式、管線指令與資料流重導向等功能,以達到我們的處理指令。

        個人了解:其實Shell script 就是window 中的批處理指令,它将shell 指令、再加上一點腳本的文法 寫出來的程式。shell script 用在系統管理上面是很好的一項工具,但是用在處理大量數值運算上,就不夠好了,因為shell scripts的速度較慢,且使用的CPU資源較多,造成主機資源的配置設定不良。

變量:

變量類型:bash變量類型預設為字元串,可以是整型或數組類型,沒有浮點型,是以沒有小數,1/3 結果是0.

變量聲明:預設為字元串,可以 直接聲明為 變量名=變量内容(x=123)這樣,如果要聲明為數組或者整型可以:

Linux 學習記錄 四(Bash 和 Shell scirpt).
  • 變量和變量内容以一個等号=連接配接,a=123
  • 等号兩邊不能直接接空格符
  • 由英文字母和數字組成,但開頭不能是數字
  • 變量内容中如果有特殊字元,可以用""或''将變量内容結合起來
  • " "中 $變量,可以保留原本的特性
  • ' ' 中$變量,當成一般字元來處理
  • 可以用跳脫字元 \ 來使不認識的特殊字元來當成一般字元
  • ``或者()的意義:``或者()裡面的指令先被執行,作為外部的輸入資訊
  • 将 - 變成 + 可以進行[取消]動作:declare +x sum :
  • 單獨列出變量的類型:declare -p sum
  • 更新成環境變量:export PATH
  • 取消變量 :unset a
  • 數組定義:var[1]="123" var[2]="456" var[3]="789"
  • 引用數組 echo ${var[1]}
  • 變量 $:出現的數字就是你的PID号碼
  • 變量 ?:上一個錯誤指令的錯誤代碼,如果沒有錯誤就為0

變量互動:read -p "請輸入你的名字:" -t 30 name (-p表示提示世界,-t 表示30秒的輸入時間)

變量内容的擴充:PATH="$PATH":/home/bin

變量内容的删除:echo ${path#/*:} 這句話的意思是從/開始到:之間删除掉最短的字元

Linux 學習記錄 四(Bash 和 Shell scirpt).

變量内容的替換:

Linux 學習記錄 四(Bash 和 Shell scirpt).

執行: 

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   小于等于
Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

腳本的變量互動還可以用 ${0}、${1}、${2}、${3} 來進行,${0} 表示執行的腳本名、${1} 表示輸入的第一個變量、${2}表示輸入的第二個變量、${3} 表示輸入的第三個變量 

Linux 學習記錄 四(Bash 和 Shell scirpt).

if 條件判斷

Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

 case 條件判斷

Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

流程控制(循環):

while 循環

Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

 for 循環

Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

for 循環

Linux 學習記錄 四(Bash 和 Shell scirpt).
Linux 學習記錄 四(Bash 和 Shell scirpt).

函數:

Linux 學習記錄 四(Bash 和 Shell scirpt).

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