只要能夠操作應用程序的接口都能稱為shell。狹義的shell指的是命令行方面的軟件,包括bash。廣義的shell則包括圖形界面軟件,因為圖形界面其實也可以操作各種應用程序來調用內核工作,不過,在這里我們主要指的是bash。
# type [-tpa] command –> 查看命令是否為bash的內置命令或者是外部命令
* 利用$var或者是${var}可獲取變量var的值
* bash中的雙引號:特殊字符如$等,可以保有原本的特性
* bash中的單引號:所有的字符均為普通的字符,沒有其他含義
*可以用將特殊字符變成一般字符
* 可用$(其他命令)來在命令中嵌套其他命令的返回值,也就是說:${var}取得變量var的值,$(command)取得命令返回值
* 若變量需要在其他子進程中執行,需要export var 來使變量成為環境變量
* unset var 可取消變量var的定義
====環境變量====
# env –> 查看當前系統的環境變量
$本身也是一個變量,表示本shell的PID號,比如 # echo $$ 輸出本shell的PID
?本事也是一個變量,表示上一個執行的命令的返回值,一般如果是0表示執行成功,如果非0表示有問題。
公共的語系編碼設置:/etc/sysconfig/i18n
# read [-pt] variable –> 鍵盤讀取變量輸入值
-p:后面可以跟提示符
-t:后面可以接等待的秒數,不會一直等待用戶輸入
====變量的聲明====
# declare [-aixrp] var
-a:將后面的var定義為數組類型
-i:將后面的var定義為integer整數類型
-x:用法與export一樣,就是將后面的var變成環境變量
-r:將變量var設置成readonly狀態,該變量不能被更改,也不能重設
-p:單獨列出變量的類型
如果把-改成+表示取消操作
====限制用戶的計算機資源使用====
# ulimit [-SHacdfltu] [配額]
-H:hardlimit,嚴格的限制,必定不能超過這個數值
-S:softlimit,可以超過這個值,但有警告信息
-a:后面不接任何參數,列出所有的限制額度
-c:某些進程發生錯誤的時候,系統會將該進程在內存中的信息寫成文件,稱為內核文件。限制每個內核文件的最大容量
-f:此shell可創建的最大單一文件容量,單位為KB
-d:進程可以使用的最大內存量
-l:可用于lock的內存量
-t:最大的CPU時間(單位為秒)
-u:單一用戶可使用的最大進程(process)數量
====變量內容的刪除與替換====
# echo ${path#/*:} –> 刪除path變量中最前面的那個以/開頭,以:結尾的
# echo ${path##/*:} –> 刪除最長的那個,也就是說只保留了最后的一個路徑
# –> 符合替換文字的最短的那個
## –> 符合替換文字的最長的那個
如果想從后面開始刪,用%替換#即可
接下來講替換功能:
# echo ${path/sbin/SBIN} –> 將第一個sbin替換成SBIN
# echo ${path//sbin/SBIN} –> 將所有的sbin替換成SBIN
我們將這部分總結說明下一下:
變量設定方式 說明 ${變量#關鍵字}
${變量##關鍵字} 若變量內容從頭開始的數據符合『關鍵字』,則將符合的最短數據刪除
若變量內容從頭開始的數據符合『關鍵詞』,則將符合的最長數據刪除 ${變量%關鍵字}
${變量%%關鍵字} 若變量內容從尾向前的數據符合『關鍵字』,則將符合的最短資料刪除
若變量內容從尾向前的數據符合『關鍵字』,則將符合的最長資料刪除 ${變量/舊字串/新字串}
${變量//舊字串/新字串} 若變量內容符合『舊字串』則『第一個舊字串會被新字串取代』
若變量內容符合『舊字串』則『全部的舊字串會被新字串取代』
# username=${username:-root} –> 如果username非空就取原值,如果沒有設置或者為空字符串就設置成root
====bash登錄界面與登錄成功后的歡迎界面====
tips:最好是單一bash登陸,然后利用job control來切換不同的工作,這樣的話shell的history才能完全保存下來
命令的執行搜索路徑順序:先alias,再builtin,再$PATH
bash的登陸界面配置文件:/etc/issue,遠處登陸界面配置文件:/etc/issue.net
命令# man mingetty查看issue中各個代碼的意義
登陸成功后顯示的信息配置文件:/etc/motd
====bash環境變量====
login shell的配置文件:
/etc/profile:系統全局配置文件,最好不要修改這個文件
~/.bash_profile或者~/.bash_login或者~/.profile:用戶自定義bash配置文件
~/.bashrc,這個配置文件login shell和non-login shell都會讀取
====bash中的通配符和特殊字符====
符號 意義 * 代表『 0 個到無窮多個』任意字符 ? 代表『一定有一個』任意字元 [ ] 同樣代表『一定有一個在括號內』的字元(非任意字元)。例如 [abcd] 代表『一定有一個字元, 可能是 a, b, c, d 這四個任何一個』 [ - ] 若有減號在中括號內時,代表『在編碼順序內的`所有字元』。例如 [0-9] 代表 0 到 9 之間的所有數字,因為數字的語系編碼是連續的! [^ ] 若中括號內的第一個字元為指數符號 (^) ,那表示『反向選擇』,例如 [^abc] 代表 一定有一個字元,只要是非 a, b, c 的其他字元就接受的意思。
除了通配符之外,bash 環境中的特殊符號有哪些呢?底下我們先匯整一下:
符號 內容 # 注釋符號:這個最常被使用在 script 當中,視為說明#在后的語句均不執行 跳脫符號:將『特殊字符或萬用字符』還原成一般字元 | 管道 (pipe):分隔兩個管道命令的界定(后兩節介紹); ; 連續指令下達分隔符:連續性命令的界定 (注意!與管道命令不相同) ~ 使用者的家目錄 $ 取用變量前置字元:亦即是變量之前需要加的變量取代值 & 工作控制 (job control):將指令變成背景下工作 ! 邏輯運算意義上的『非』 not 的意思! / 目錄符號,路徑分割符號 >, >> 數據流重導向:輸出導向,分別是『取代』與『累加』 <, << 數據流重導向:輸入導向 (這兩個以后說明) ‘ ‘ 單引號,里面全是普通字符,不具備變量置換功能 ” “ 具有變量置換的功能! ` ` 兩個『 ` 』中間為可以先執行的指令,亦可使用 $( ) ( ) 在中間為子 shell 的起始與結束 { } 在中間為命令區塊的組合!
本文來源:http://www.nvnqwx.com/meiwen/riji/2127391.htm