1. 程式人生 > 其它 >bash shell的相關知識

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目錄