1. 程式人生 > >學習Shell(一)

學習Shell(一)

檢視 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 通過PS1PS2兩個環境變數來控制提示符格式:

  • PS1 控制最外層命令列的提示符格式。
  • PS2 控制第二層命令列的提示符格式。


要顯示提示符的當前格式,可以使用 echo 輸出 PS1 和 PS2:

[[email protected] ~]# echo $PS1
[\[email protected]\h \W]\$
[[email protected] ~]# echo $PS2
>

Shell 使用以\為前導的特殊字元來表示命令提示符中包含的要素,這使得 PS1 和 PS2 的格式看起來可能有點奇怪。下表展示了可以在 PS1 和 PS2 中使用的特殊字元。

Bash shell 提示符可以包含的要素
字元 描述
\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 時將重新使用預設的提示符格式。