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 其實只會讀取這兩個配置文件:
- /etc/profile:這是系統整體的配置,你最好不要修改這個文件;
- ~/.bash_profile 或 ~/.bash_login 或 ~/.profile:屬於使用者個人配置,你要改自己的數據,就寫入這裏!
- ~/.bash_profile
- ~/.bash_login
- ~/.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 而已!
符號 | 意義 |
* | 代表『 0 個到無窮多個』任意字符 |
? | 代表『一定有一個』任意字符 |
[ ] | 同樣代表『一定有一個在括號內』的字符(非任意字符)。例如 [abcd] 代表『一定有一個字符, 可能是 a, b, c, d 這四個任何一個』 |
[ - ] | 若有減號在中括號內時,代表『在編碼順序內的所有字符』。例如 [0-9] 代表 0 到 9 之間的所有數字,因爲數字的語系編碼是連續的! |
[^ ] | 若中括號內的第一個字符爲指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字符,只要是非 a, b, c 的其他字符就接受的意思。 |
符號 | 內容 |
# | 批註符號:這個最常被使用在 script 當中,視爲說明!在後的數據均不運行 |
\ | 跳脫符號:將『特殊字符或通配符』還原成一般字符 |
| | 管線 (pipe):分隔兩個管線命令的界定(後兩節介紹); |
; | 連續命令下達分隔符:連續性命令的界定 (注意!與管線命令並不相同) |
~ | 用戶的家目錄 |
$ | 取用變量前導符:亦即是變量之前需要加的變量取代值 |
& | 工作控制 (job control):將命令變成背景下工作 |
! | 邏輯運算意義上的『非』 not 的意思! |
/ | 目錄符號:路徑分隔的符號 |
>, >> | 數據流重導向:輸出導向,分別是『取代』與『累加』 |
<, << | 數據流重導向:輸入導向 (這兩個留待下節介紹) |
' ' | 單引號,不具有變量置換的功能 |
" " | 具有變量置換的功能! |
` ` | 兩個『 ` 』中間爲可以先運行的命令,亦可使用 $( ) |
( ) | 在中間爲子 shell 的起始與結束 |
{ } | 在中間爲命令區塊的組合! |