bash shell的相關知識
shell與bash
什麼是shell
——以上圖片摘自《鳥哥的Linux私房菜》
系統核心不能隨意地被操作,所以就設計出了殼程式shell,一方面保護了系統核心,另一方面提供了人機互動的渠道。
bash與shell的關係
bash是眾多shell的一種,/bin/bash是Linux的預設shell。
shell的變數
變數的設定
var_name=value
var_name=char
var_name="$LANG" # attribute is preserved
var_name='$LANG' # 單括號內的內容被轉為了字元型
取消設定的變數 unset var_name
變數的有效範圍:環境變數和自定義變數
環境變數通過env檢視,set命令可以檢視所有型別的變數,系統變數名稱用全大寫字母表示,自己定義的變數用小寫表示。
echo $?回傳上次命令執行的結果,0表示命令正確執行,127表示存在錯誤。
想要自定義變數能夠給子程式用,export var_name。我的理解是,通過export將自定義變數臨時提升為了環境變數。
萬用字元和特殊符號
* # 代表任意多個任意字元
? # 代表一個任意字元
[] # 代表有一個字元滿足括號內給定範圍的條件,可以不連續
find / -iname [1,z,b]* # 找到根目錄下以1或z或b開頭命名的檔案
[-] # 代表有一個字元滿足括號編碼順序範圍內的條件,如[1-9], [a-z]
find / -iname [1-3]* # 找到根目錄下所有以在數字1-3範圍內開頭命名的檔案
[^] # 代表有一個字元滿足不包含在^號後內的條件
find / -iname [^1-9] # 找到根目錄下所有不以數字1-9範圍內開頭命名的檔案
find / -iname [^1,2] # 找到根目錄下不以數字1和數字2開頭命名的檔案!注意2之前沒加^!
資料流重導向
標準輸入stdin、標準輸出stdout與標準錯誤輸出stderr
1. 標準輸入 (stdin) :程式碼為 0 ,使用 < 或 << ;
2. 標準輸出 (stdout):程式碼為 1 ,使用 > 或 >> ;
3. 標準錯誤輸出(stderr):程式碼為 2 ,使用 2> 或 2>>
- 1> :以覆蓋的方法將『正確的資料』輸出到指定的檔案或裝置上;
- 1>>:以累加的方法將『正確的資料』輸出到指定的檔案或裝置上;
- 2> :以覆蓋的方法將『錯誤的資料』輸出到指定的檔案或裝置上;
- 2>>:以累加的方法將『錯誤的資料』輸出到指定的檔案或裝置上;
——以上摘自《鳥哥的Linux私房菜》
&&與||
——以上摘自《鳥哥的Linux私房菜》
管道符相關
cut與grep
cut -d '分隔字元' -f fields(number, number)
[root@study_rhel ~]# echo $PATH /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin [root@study_rhel ~]# echo $PATH | cut -d ':' -f 1 # /usr/local/sbin 按:分割後是第一段 /usr/local/sbin [dmtsai@study ~]$ echo ${PATH} | cut -d ':' -f 3,5
grep,輸出符合給定條件的所在行
grep後面所跟需要被查詢的字元需要加引號嗎?
如果只是一串普通字元可以不加。如果是兩個字元中間包含空格,就需要加引號。一般常量、字串用單引號,變數用雙引號。(參考“變數的設定”一節)
grep "$a" file # 查詢變數a的值,輸出所在行
grep '$a' file # 查詢“$a”字串,輸出所在行
grep '\\' file # 查詢‘\’字元,輸出所在行
雙重定向命令tee
——以上摘自《鳥哥的Linux私房菜》
檔案分割命令split
——以上摘自《鳥哥的Linux私房菜》
引數傳遞過濾命令xargs
x -arguments
使用xargs 的原因是, 很多指令其實並不支援管道符,因此我們可以通過xargs來為後面的指令使用standard input中的資料(引數)。
-的用途
減號”-”就是代表標準輸出/標準輸入, 視命令而定. “-”代替stdin和stdout的用法:
tar -cvf - /home | tar -xvf -
tar -cvf - /home 把/home壓縮後,列印在stdout上,tar -xvf - 從stdin讀取內容,並在當前目錄解壓
tar cf - access.log | tar xf - -C /opt # 把access.log檔案打包,通過管道符,把前一個命令的輸出變為後一個命令的輸入,在/opt目錄解壓。等效於複製檔案到/opt目錄