shell就是乙個命令列直譯器,它的作用是解釋執行使用者的命令,使用者輸入一條命令,shell就解釋執行一條,這種方式稱為互動式(interactive)。
shell還有一種執行命令的方式稱為批處理(batch),使用者事先寫一 個shell指令碼(script),其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲 命令。shell指令碼和程式語言很相似,也有變數和流程控制語句,包括迴圈和分支。但shell指令碼是解釋執行的,不需要編譯,shell程式從指令碼中一行一行讀取並執行這些命令,相當於乙個使用者把指令碼中的命令一行一行敲到shell提示符下執行。作為程式語言,它雖然不是 linux系統核心的一部分,但它呼叫了系統核心的大部分功能來執行程式、建立文件並以並行的方式協調各個程式的執行。
linux系統中常見的shell有:sh、csh、tcsh、bash使用命令: cat /etc/shells 可以檢視當前系統支援的bash
shell指令碼通常以「 .sh」結尾,並不是系統規定,而是一種業界規範
//第一種執行方式:
[root@initiator desktop]# sh testshell.sh
//第二種執行方式:
指令碼中應該有指令碼的說明資訊,
下面的例子是vim自動新增指令碼說明
vim /etc/vimrc
67 map ms:call addtile()'s ##設定快捷鍵為f4
68 function addtile() ##設定函式
69 call append(0,"#!/bin/bash")
70 call append(1,"###############################")
71 call append(2,"#author :lee")
72 call append(3,"#email :[email protected]")
73 call append(4,"#version :")
74 call append(5,"#creat_date :".strftime("%y-%m-%d"))
75 call append(6,"#description :")
76 call append(7,"###############################")
77 endfunction
shell變數不需要進行任何宣告,直接定義即可,因為shell變數的值實際上都是字串(對於沒有定義的變數預設是乙個空串)。定義的時候shell變數由大寫字母加下劃線組成,並且定義的時候等號兩邊不能存在空格,否則會被認為是命令!環境變數:shell程序的環境變數只在當前環境生效,但可以從當前shell程序傳給fork出來的子程序,當前環境關閉則變數失效。
本地變數:只針對配置過的使用者生效,其他使用者無法使用
系統變數:
利用printenv可以顯示當前shell程序的環境變數;利用set命令可以顯示當前shell程序中的定義的所有變數(包括環境變數和本地變數)和函式。
乙個shell變數定義後僅存在於當前shell程序,是乙個本地變數。用export命令可以把本地變數匯出為環境變數。用unset命令可以刪除已定義的環境變數或本地變數。
//分步 先定義後匯出
count=5
export count
//一步完成定義和匯出環境變數
export count=5
//刪除已經定義的環境變數
unset count
變數引用:
引用shell變數要用到$符號,加{}可以防止歧義。
例如:count=5
echo $count
echo $911
// * : 匹配0個或多個任意字元
// ? : 匹配乙個任意字元
// [若干字元] : 匹配方括號中任意乙個字元的一次出現
反引號`` 或者 $()
shell會先執行反引號或$()中的命令,將結果代換到當前命令列中!
反引號和$()的區別:
反引號本身就對\進行了轉義,保留了本身意思,如果我們想在反引號中起到\的特殊意義,我們必須使用2個\來進行表示。
反引號中: \\ = \
$()中:\ = \
算數代換:$(())
例如:將10-2的結果賦給sub,並顯示本地變數sub
sub=$((10-2))
echo $sub
shell指令碼中的單引號和雙引號一樣都是字串的界定符,單引號用於保持引號內所有字元的字面值,而雙引號有些情況則特殊。如果字串中有特殊字元需要處理時就用雙引號。
注:單引號標註的字元中不能再出現單引號。
舉個例子:
#!/bin/bash
echo '\\'
echo "\\"
echo '`date`'
echo "`date`"
diff命令在最簡單的情況下,比較給定的兩個檔案的不同。如果使用「-」代替「檔案」引數,則要比較的內容將來自標準輸入。diff命令是以逐行的方式,比較文字檔案的異同處。如果該命令指定進行目錄的比較,則將會比較該目錄中具有相同檔名的檔案,而不會對其子目錄檔案進行任何比較操作。
diff(選項)(引數)
[num1,num2][a|c|d][num3,num4]
a ##新增
c ##改變
d ##刪除
num1,num2 ##表示在檔案1中的行號
num3,num4 ##表示在檔案2中的行號
以上說明指定了兩個檔案中不同處的行號及其相應的操作。在輸出形式中,每一行後面將跟隨受到影響的若干行。其中,以開始的行屬於檔案1,開始的行屬於檔案2。
diff常用於打補丁,序言安裝patch
yum install patch -y ##安裝補丁軟體
diff file file1>file.path ##生成補丁檔案file.path
patch file file.path ##給file打補丁
##或者
patch -b file file.path ##-b表示備份原始檔為file.orig
指令碼學習 shell指令碼入門 符號篇
shell變數不需要進行任何宣告,直接定義即可,因為shell變數的值實際上都是字串 對於沒有定義的變數預設是乙個空串 定義的時候shell變數由大寫字母加下劃線組成,並且定義的時候等號兩邊不能存在空格,否則會被認為是命令!shell變數的種類 利用printenv可以顯示當前shell程序的環境變...
shell指令碼符號篇
hell執行指令碼 bin bash echo 這是乙個shell指令碼 shell指令碼中用 表示注釋,如果 位於第一 開頭 並且是則例外,它表 該指令碼使 後 指定的直譯器 bin sh解釋執 第一種執行方式 chmod x script.sh shell會 fork 乙個子程序並調 用 exe...
shell指令碼入門篇
1.變數yourname zhangsan echo 不需要型別宣告,賦值時等號中間不能有空格,使用時必須在前面加 建議盡量將變數名用花括號包裹 readonly yournameunset yourname 2.字串 單引號和雙引號的區別 3.陣列array name 1 zhangsan ech...