學習Shell(一)
阿新 • • 發佈:2018-11-02
檢視 Shell
Shell 是一個程式,一般都是放在/bin
或者/user/bin
目錄下,當前 Linux 系統可用的 Shell 都記錄在/etc/shells
檔案中。/etc/shells
是一個純文字檔案,你可以在圖形介面下開啟它,也可以使用 cat 命令檢視它。
通過 cat 命令來檢視當前 Linux 系統的可用 Shell:
$ cat /etc/shells
/bin/sh /bin/bash /sbin/nologin /usr/bin/sh /usr/bin/bash /usr/sbin/nologin
在現代的 Linux 上,sh 已經被 bash 代替,/bin/sh
往往是指向/bin/bash
的符號連結。
如果你希望檢視當前 Linux 的預設 Shell,那麼可以輸出 SHELL 環境變數:
$ echo $SHELL
/bin/bash
輸出結果表明預設的 Shell 是 bash。
Shell 提示符
對於普通使用者,Base shell 預設的提示符是美元符號
$
;對於超級使用者(root 使用者),Bash Shell 預設的提示符是井號#
。該符號表示 Shell 等待輸入命令。
[[email protected] ~]#
這種格式包含了以下三個方面的資訊:
- 啟動 Shell 的使用者名稱,也即 mozhiyan;
- 本地主機名稱,也即 localhost;
- 當前目錄,波浪號
~
是主目錄的簡寫表示法。
Shell 通過PS1
和PS2
兩個環境變數來控制提示符格式:
- PS1 控制最外層命令列的提示符格式。
- PS2 控制第二層命令列的提示符格式。
要顯示提示符的當前格式,可以使用 echo 輸出 PS1 和 PS2:
[[email protected] ~]# echo $PS1 [\[email protected]\h \W]\$ [[email protected] ~]# echo $PS2 >
Shell 使用以\
為前導的特殊字元來表示命令提示符中包含的要素,這使得 PS1 和 PS2 的格式看起來可能有點奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字元。
字元 | 描述 |
---|---|
\a | 鈴聲字元 |
\d | 格式為“日 月 年”的日期 |
\e | ASCII轉義字元 |
\h | 本地主機名 |
\H | 完全合格的限定域主機名 |
\j | shell當前管理的作業數 |
\1 | shell終端裝置名的基本名稱 |
\n | ASCII換行字元 |
\r | ASCII回車 |
\s | shell的名稱 |
\t | 格式為“小時:分鐘:秒”的24小時制的當前時間 |
\T | 格式為“小時:分鐘:秒”的12小時制的當前時間 |
\@ | 格式為am/pm的12小時制的當前時間 |
\u | 當前使用者的使用者名稱 |
\v | bash shell的版本 |
\V | bash shell的釋出級別 |
\w | 當前工作目錄 |
\W | 當前工作目錄的基本名稱 |
\! | 該命令的bash shell歷史數 |
\# | 該命令的命令數量 |
\$ | 如果是普通使用者,則為美元符號$ ;如果超級使用者(root 使用者),則為井號# 。 |
\nnn | 對應於八進位制值 nnn 的字元 |
\\ | 斜槓 |
\[ | 控制碼序列的開頭 |
\] | 控制碼序列的結尾 |
注意,所有的特殊字元均以反斜槓\
開頭,目的是與普通字元區分開來。您可以在命令提示符中使用以上任何特殊字元的組合。
我們可以通過修改 PS1 變數來修改提示符格式,例如:
[[email protected] ~]# PS1="[\t][\u]\$ " [22:12:45][root]$
新的 Shell 提示符現在可以顯示當前的時間和使用者名稱。不過這個新定義的 PS1 變數只在當前 Shell 會話期間有效,再次啟動 Shell 時將重新使用預設的提示符格式。