1. 程式人生 > >SHELL指令碼入門篇——符號

SHELL指令碼入門篇——符號

shell基礎知識
shell指令碼與Windows/Dos下的批處理相似,都是將各類命令預先放入到一個程式檔案,主要方便管理員進行設定和管理用的。但shell指令碼比Windows下的批處理更強大。
shell指令碼第一句開頭為#!,註釋為在需註釋的行前面加上#
shell和shell指令碼的區別?
shell是一個命令列直譯器,本身是一個用c語言編寫的程式,是使用者使用Linux的橋樑,他的作用是遵循一定的語法將輸入的命令加以解釋並傳給系統。而shell指令碼是根據shell編寫的一個純文字檔案,將一些shell指令寫在裡面,然後用bash或sh告訴shell執行指令碼檔案。
shell執行指令的過程


shell在執行指令的時候,需要判斷命令是內建命令還是外部命令,內建命令直接執行,當為外部命令時,shell為指令開闢一個子程序,然後程序程式替換,父程序等待子程序退出。
shell 指令碼執行指令的過程
在執行shell指令碼的每一條指令也都需要判斷命令是否是內建命令,若為內建命令則直接在當前的程序內執行,否則開闢子程序,當前程序等待子程序的退出,後面的所有命令類似。
常用內指命令echo, eval, exec, export, readonly, read, shift, wait和點(.)
具體內容參考此部落格
這裡寫連結內容
shell變數
shell中變數分為本地變數和環境變數,環境變數是任何程序都有的概念,本地變數是shell特有的概念,本地變數只存在當前shell程序。
env | grep 變數名 檢視環境變數
set | grep 變數名 檢視變數
export 變數名 可以將本地變數轉換為環境變數
unset 變數名 刪除已定義的變數
這裡寫圖片描述

這裡寫圖片描述
在使用變數時,將變數用{}包起來,也可在不引起歧義的情況下直接使用
echo echo{變數名}
這裡寫圖片描述
shell中所有的變數均是字串型別的,使用未定義的變數,則該值為空。
檔名替換:
萬用字元:,例:rm -rf .c,所有以.c結尾的檔案都被刪除
匹配一個任意字元,例:rm -f test?.c 所有test後只有一個字元的test?.c檔案均被刪除
[若干字元]:匹配方括號中任意一個字元的一次出現。例:test[56];結果為test[5],test[6],例:rm -rf test[0-9]
單引號和雙引號
單引號中的字元僅僅是字面值,雙引號中的字元在執行時會對字元進行解析。
這裡寫圖片描述

*轉義字元*
和c語言類似,\在shell中被用作轉義字元,用於去除緊跟其後的單個字元的特殊意義(回車除外)。
例如建立一個$$檔案
這裡寫圖片描述
有時候\也不能避免因為特殊字元建立檔案失敗,例如建立-fiel檔案,只能採取下面兩種方法
這裡寫圖片描述

有兩個命令可以讓shell先執行該命令,分別為反引號`和$()
這裡寫圖片描述
$(())可以進行算術代換,但僅僅只能用於+-*/和(),並且只能用於整數
這裡寫圖片描述