linux學習篇8--- shell,bash講解 2 bash的配置文件


linux學習篇8---- 《鳥哥的Linux私房菜基礎學習篇(第三版)》讀書筆記


數組 (array) 變量類型

var[index]=content

範例:配置上面提到的 var[1] ~ var[3] 的變量。
[root@www ~]# var[1]="small min"
[root@www ~]# var[2]="big min"
[root@www ~]# var[3]="nice min"
[root@www ~]# echo "${var[1]}, ${var[2]}, ${var[3]}"
small min, big min, nice min

數組的變量類型比較有趣的地方在於『讀取』,一般來說,建議直接以 ${數組} 的方式來讀取


與文件系統及程序的限制關係: ulimit

查閱相關資料


變量內容的刪除與取代

變量配置方式 說明
${變量#關鍵詞}
${
變量##關鍵詞}
若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最短數據刪除
若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最長數據刪除
${變量%關鍵詞}
${
變量%%關鍵詞}
若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最短數據刪除
若變量內容從尾向前的數據符合『關鍵詞』,則將符合的最長數據刪除
${變量/舊字符串/新字符串}
${
變量//舊字符串/新字符串}
若變量內容符合『舊字符串』則『第一個舊字符串會被新字符串取代
若變量內容符合『舊字符串』則『全部的舊字符串會被新字符串取代

new_var=${old_var-content}
   新的變量,主要用來取代舊變量。新舊變量名稱其實常常是一樣的

new_var=${old_var-content}
   這是本範例中的關鍵詞部分!必須要存在的哩!

new_var=${old_var-content}
   舊的變量,被測試的項目!

new_var=${old_var-content}
   變量的『內容』,在本範例中,這個部分是在『給予未配置變量的內容』
變量配置方式 str 沒有配置 str 爲空字符串 str 已配置非爲空字符串
var=${str-expr} var=expr var= var=$str
var=${str:-expr} var=expr var=expr var=$str
var=${str+expr} var= var=expr var=expr
var=${str:+expr} var= var= var=expr
var=${str=expr} str=expr
var=expr
str 不變
var=
str 不變
var=$str
var=${str:=expr} str=expr
var=expr
str=expr
var=expr
str 不變
var=$str
var=${str?expr} expr 輸出至 stderr var= var=$str
var=${str:?expr} expr 輸出至 stderr expr 輸出至 stderr var=$str

歷史命令:history

[root@www ~]# history [n]
[root@www ~]# history [-c]
[root@www ~]# history [-raw] histfiles
選項與參數:
n   :數字,意思是『要列出最近的 n 筆命令行表』的意思!
-c  :將目前的 shell 中的所有 history 內容全部消除
-a  :將目前新增的 history 命令新增入 histfiles 中,若沒有加 histfiles ,
      則默認寫入 ~/.bash_history
-r  :將 histfiles 的內容讀到目前這個 shell 的 history 記憶中;
-w  :將目前的 history 記憶內容寫入 histfiles 中!

bash 的進站與歡迎信息: /etc/issue, /etc/motd


bash 的環境配置文件

  • login shell:取得 bash 時需要完整的登陸流程的,就稱爲 login shell。舉例來說,你要由 tty1 ~ tty6 登陸,需要輸入用戶的賬號與密碼,此時取得的 bash 就稱爲『 login shell 』囉;

  • non-login shell:取得 bash 接口的方法不需要重複登陸的舉動,舉例來說,(1)你以 X window 登陸 Linux 後, 再以 X 的圖形化接口啓動終端機,此時那個終端接口並沒有需要再次的輸入賬號與密碼,那個 bash 的環境就稱爲 non-login shell了。(2)你在原本的 bash 環境下再次下達 bash 這個命令,同樣的也沒有輸入賬號密碼, 那第二個 bash (子程序) 也是 non-login shell 。

一般來說,login shell 其實只會讀取這兩個配置文件:

  1. /etc/profile:這是系統整體的配置,你最好不要修改這個文件;
  2. ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:屬於使用者個人配置,你要改自己的數據,就寫入這裏!
bash 的 login shell 情況下所讀取的整體環境配置文件其實只有 /etc/profile,但是 /etc/profile 還會呼叫出其他的配置文件:
/etc/inputrc/etc/profile.d/*.sh/etc/sysconfig/i18n

個人配置文件~/.bash_profile (login shell 纔會讀):
  1. ~/.bash_profile
  2. ~/.bash_login
  3. ~/.profile

其實 bash 的 login shell 配置只會讀取上面三個文件的其中一個, 而讀取的順序則是依照上面的順序。



source :讀入環境配置文件的命令

[root@www ~]# source 配置文件檔名

範例:將家目錄的 ~/.bashrc 的配置讀入目前的 bash 環境中
[root@www ~]# source ~/.bashrc  <==底下這兩個命令是一樣的!
[root@www ~]#  .  ~/.bashrc

利用 source 或小數點 (.) 都可以將配置文件的內容讀進來目前的 shell 環境中! 舉例來說,我修改了 ~/.bashrc ,那麼不需要註銷,立即以 source ~/.bashrc 就可以將剛剛最新配置的內容讀進來目前的環境中!


  • ~/.bashrc (non-login shell 會讀)

談完了 login shell 後,那麼 non-login shell 這種非登陸情況取得 bash 操作接口的環境配置文件又是什麼? 當你取得 non-login shell 時,該 bash 配置文件僅會讀取 ~/.bashrc 而已!


其他相關配置文件
/etc/man.config
規範了使用 man 的時候, man page 的路徑到哪裏去尋找!
~/.bash_history
歷史命令就記錄在這裏
~/.bash_logout
當我註銷 bash 後,系統再幫我做完什麼動作後才離開


終端機的環境配置: stty, set


通配符與特殊符號
符號 意義
* 代表『 0 個到無窮多個』任意字符
? 代表『一定有一個』任意字符
[ ] 同樣代表『一定有一個在括號內』的字符(非任意字符)。例如 [abcd] 代表『一定有一個字符, 可能是 a, b, c, d 這四個任何一個』
[ - ] 若有減號在中括號內時,代表『在編碼順序內的所有字符』。例如 [0-9] 代表 0 到 9 之間的所有數字,因爲數字的語系編碼是連續的!
[^ ] 若中括號內的第一個字符爲指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字符,只要是非 a, b, c 的其他字符就接受的意思。

bash 環境中的特殊符號
符號 內容
# 批註符號:這個最常被使用在 script 當中,視爲說明!在後的數據均不運行
\ 跳脫符號:將『特殊字符或通配符』還原成一般字符
| 管線 (pipe):分隔兩個管線命令的界定(後兩節介紹);
; 連續命令下達分隔符:連續性命令的界定 (注意!與管線命令並不相同)
~ 用戶的家目錄
$ 取用變量前導符:亦即是變量之前需要加的變量取代值
& 工作控制 (job control):將命令變成背景下工作
! 邏輯運算意義上的『非』 not 的意思!
/ 目錄符號:路徑分隔的符號
>, >> 數據流重導向:輸出導向,分別是『取代』與『累加』
<, << 數據流重導向:輸入導向 (這兩個留待下節介紹)
' ' 單引號,不具有變量置換的功能
" " 具有變量置換的功能!
` ` 兩個『 ` 』中間爲可以先運行的命令,亦可使用 $( )
( ) 在中間爲子 shell 的起始與結束
{ } 在中間爲命令區塊的組合!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章