什麼是shell?
Shell是一個應用程式,它連線了使用者和Linux核心,讓使用者能夠更加高效、安全、低成本地使用Linux核心,這就是Shell的本質。
shell與Linux系統關係圖
shell也能夠程式設計
- 有if...else選擇結構,case...in 開關語句,for、while、until迴圈
- 變數、陣列、字串、註釋、加減乘除、邏輯運算等概念;
- 函式,包含使用者自定義的函式和內建函式(例如printf\export\eval等)
shell在運維中的地位
下面手鍊形象地展示了Shell在運維工作中的地位
先看一個簡單的shell程式
#!/bin/bash # This is to show what a example looks like. echo "This first example" echo # This inserts an empth line in output. echo "We are currently in the following directory" pwd echo echo "This directory contains the following files" ls
註釋:
#!/bin/bash #!跟shell命令的完全路徑。作用:顯示後期命令以哪種shell來執行這些命令。如不指shell,以當前shell作為執行的shell
# shell 中以#開頭表示,整行就被當作一個註釋。執行時被忽略。
總結:
建立shell程式的步驟
第一步:建立一個包含命令和控制結構的shell檔案 第二步:修改這個檔案的許可權使它可以執行,使用chmod u+x 第三步:執行 方法一:./{檔名} 方法二:使用決定路徑 /root/../{檔名} 方法三:bash {檔名}
Shell變數
變數是shell傳遞資料的一種方法。變數使用來表示每個值的符號名
例:x=1
Shell 有兩種變數:臨時變數和永久變數。
臨時變數:是shell程式內部定義的,其使用範圍僅限於定義它的程式,對於其它程式不可見。
永久變數:是環境變數,其值不隨shell指令碼的執行結束而消失。
例:如:$PATH
# 用作執行某個命令的時候,本地查詢不到某個命令或檔案,會到這個宣告的目錄中去查詢
使用者定義變數:由字母或下劃線打頭。由字母、數字或下劃線組成,並且大小寫字母意義不同。變數名長度沒有限制。
使用變數值時,要在變數名前加上字首“$”。
例如:1VAR 就是非法變數。
變數賦值:賦值號“=”兩邊應沒有空格。
例如:A=123
例如:將一個命令的執行結構賦值給變數
可以利用變數和其它字元組成一個新的字串。
列出所有變數
set
過濾
給變數賦值多個單詞
單引號和雙引號的區別
單引號之間的內容原封不動地指定給了變數,
雙引號取消了空格的作用,保留特殊符號的含義
雙引號:
單引號:
刪除變數
位置變數和特殊變數
位置變數:Shell 解釋執行使用者命令時,將命令列的第一個字作為命令名,而其它名字作為引數。由出現在命令列上的位置確定的引數稱為位置引數。
特殊變數:有些變數是一開始執行Script指令碼時就會設定,且不能被修改,但我們不叫它只讀系統變數,而叫它特殊變數。這些變數當一執行程式時就有了,以下是一些特殊變數
$*:這個程式的所以引數 $#:這個程式的引數個數 $$:這個程式的PID $!:執行上一個後臺程式的PID $?:執行上一個指令的返回值
程式例子:
#!/bin/bash echo "$* 表示這個程式的所以引數" echo "$# 表示這個程式的引數個數" touch /tmp/a.txt echo "$$ 表示當前程式的ID" touch /tmp/b.txt & echo "$! 執行上一個後臺指令的PID" echo "$$ 表示程式的程式ID"
結果:
變數的使用:
#!/bin/bash var1="abcd efg" echo $var1 var2=1234 echo "The value of var2 is $var2" echo $HOME echo $PATH echo $PWD
執行結果: