1?? 確定登錄 Shell
命令 echo $SHELL 回顯用戶登錄時輸入的 shell 文件名
$ echo $SHELL
/usr/bin/sh.
echo 命令可以顯示 SHELL 變量的內容或值SHELL 變量包含運行的 shell 程序的
文件名在本示例中文件名為 /usr/bin/sh 該文件包含了 POSIX Shell 代碼
下表列出了每個 shell 的文件名和缺省的系統提示符每個 shell 的超級用戶
提示符為 #
表3-2 Shell 文件名和缺省的提示符
Shell 文件名提示符
POSIX /usr/bin/sh $
C /usr/bin/csh %
Bourne 已過時/usr/old/bin/sh $
Korn 已由 POSIX shell 取代/usr/bin/ksh 鏈接到 /usr/bin/sh $
2? 暫時更改 Shell
除非處于受限的 shell 中否則可以使用以下命令暫時更改 shell
shell_name
其中shell_name 是 shell 的名稱例如sh 或 csh 暫時更改 shell 允許用
戶在其他 shell 中進行試驗通過鍵入要運行的 shell 名可以調用輸入該
shell 并顯示正確的提示符要返回原始的 shell 請鍵入 exit 或按 CTRL-D
以下示例從 POSIX Shell 中開始然后進入 C Shell 并返回到 POSIX Shell
csh(1)
$ csh 進入 C Shell
% ps 執行 ps 命令
PID TTY TIME COMMAND
6009 tty01 0:00 csh 注意 C 和 POSIX Shell 進程正在運行
5784 tty01 0:00 sh
6010 tty01 0:00 ps
% exit 退出 C Shell
$ 返回到 POSIX Shell
3? 永久更改 Shell
要永久更改登錄 shell 登錄時缺省的 shell 請使用以下 chsh (change shell)
命令
chsh(1) $ chsh username full_shell_name
其中username 是用戶名full_shell_name 是要更改為缺省 shell 的完整路
徑名如 /usr/bin/sh 確定登錄 Shell 包含每個 shell 的完整路徑名使用
chsh 命令后必須注銷并再次登錄以使更改生效例如如果使用 terry
將缺省的登錄 shell 更改為 C Shell chsh 命令的語法如下
$ chsh terry /usr/bin/csh
4? 編輯命令行
在 POSIX shell 中使用行編輯命令或編輯鍵可以在輸入之前更正命令行中
的錯誤還可以回調以前的命令并加以編輯請參閱本章下文的回調以
前的命令
使用 vi 行編輯命令
第 4 章使用 vi 編輯器說明了如何使用 vi 屏幕編輯器處理文本文件vi
編輯器還可用于編輯命令行
要在位于 POSIX shell 中時進入 vi 行編輯器模式請按 ESC 鍵從常用的
鍵入模式更改為編輯模式使用編輯命令移動光標或刪除字符輸入
vi 命令 i 或 a 返回到鍵入模式插入或添加文本
下表列出了一些 vi 編輯命令
所需操作 vi 命令
向前移動一個字符 h
向后移動一個字符 l
向前移動一個單詞 b
向后移動一個單詞 w
移動到一行的開頭 ^
移動到一行的結尾 $
刪除光標所在位置的字符 x
使用 EDITOR 變量設置管理編輯器命令集可以使用 vi 或 emacs 對 EDITOR
變量的設置還取決于定義的 VISUAL 變量
要暫時使用 vi 編輯器請鍵入 set -o vi 要關閉 vi 編輯模式請鍵入 set
+o vi 要在每次登錄時自動設置 EDITOR 變量請參閱設置登錄環境
vi 命令集附帶的行編輯示例
激活 vi 命令集如果尚未使用登錄腳本在登錄時進行設置
$ set -o vi
請鍵入以下內容但不要按 Enter 鍵
$ ll /dve | grep '^d' | more
使用 Shell
編輯命令行
第 3 章85
第 2 個元素應該是 /dev 使用以下步驟更正錯誤
1. 按 ESC 鍵光標向前移動一個字符位于 more 中的 e 處行編輯器目
前處于命令模式下
ll /dve | grep '^d' | more
2. 重復按 H 將光標移動到 /dve 中 v 處
ll /dve | grep '^d' | more
3. 按 X 字符 v 消失該行剩余部分均向左移動一個字符以填補空缺光標
當前位于 /de 中 e 處
ll /de | grep '^d' | more
4. 按 A 光標向右移動一個字符行編輯器當前已準備就緒可以將文本
添加到該行中
ll /de_ | grep '^d' | more
5. 按 V 在 /de 后插入字符 v 更正完畢
ll /dev | grep '^d' | more
6. 按 Enter 鍵執行該命令行
5 回調以前的命令
POSIX shell 將所執行的命令存儲在命令記錄中可以檢索修改和重新執行
這些命令有關 C Shell 命令記錄實現的詳細信息請參閱Shells: User's
Guide
例如通過鍵入 /usr/bin/sh 確定已進入 POSIX Shell
請嘗試執行某些命令然后重新執行以前的命令
1. 確保已將 vi 設置為命令編輯器在登錄會話的命令行中鍵入 set -o vi
或在 .profile 文件中設置適當的項并輸出 EDITOR 變量
2. 按 ESC 鍵
3. 然后重復按 K 向上滾動到所需的以前的命令
4. 或者在命令記錄列表中按 J 向上滾動
5. 找到所需的命令時可以對其進行編輯如同編輯當前命令
6. 然后可以通過按 Enter 鍵執行命令行中的命令
POSIX Shell 可以記住最近鍵入的 128 條命令并顯示全部或部分命令
例如鍵入以下命令
$ date
1994 年 9 月 8 日 星期四15:01:51
$ pwd
/home/terry
$ hostname
hpabc
現在鍵入以下命令
$ history -3
121 date
122 pwd
123 hostname
124 history -3
注意POSIX Shell 會顯示最后執行的 3 條命令 (date pwd 和 hostname) 和
history -3 命令通過在 history 后使用較大的負數可以增加命令記錄的顯
示數目例如如果記錄中有 100 條命令以下命令將顯示最后 100 條命令
$ history -100 | more
如果記錄中的命令不足 100 條將顯示全部記錄將記錄的輸入結果傳輸到
more 命令中這樣可以逐屏查看記錄命令
7? 設置登錄環境
登錄時shell 為用戶自動定義唯一的工作環境并對該環境進行維護直至用
戶注銷該環境將定義如身份工作場所和正在運行的進程等特性這些特性
由指定的環境變量值定義
shell 環境與辦公環境相似在辦公室中每個人所處環境的物理特性如燈
光和溫度相似但在辦公環境中又有許多因素是個人特有的如日常工作和
個人工作空間因此您的工作環境就有別于其他同事的工作環境正如 shell
環境不同于其他環境
登錄程序
登錄時HP-UX 運行名為 login 的程序此程序使用存儲在 /etc/passwd 文件
中的數據啟動會話此文件為每個系統用戶生成一行信息其中包括用戶名
口令以加密形式主目錄和登錄時運行的 shell 如果 /etc/passwd 未指
定 shell 則選擇 POSIX Shell (/usr/bin/sh)
login 程序的功能如下
? 顯示 Password: 提示符如有口令
? 驗證用戶名和口令是否位于 /etc/passwd 文件中
? 將缺省值或用戶定義的值指定給 shell 環境
? 開始執行 shell 進程
環境變量
shell 環境定義了 HP-UX 與用戶進行交互的方式環境特性由包含名稱和值的
環境變量定義例如每個會話的起始目錄為主目錄其環境變量是名為 HOME
的變量并在登錄過程中指定其值在整個會話過程中HOME 的值等同于
/home/terry
以下是一些在登錄過程中設置的環境變量注意大部分變量都已在缺省的
.profile 文件中設置
HOME ? 定義用戶的主目錄cd 命令的缺省目錄例如 /home/terry
? 登錄期間指定的缺省值
使用 Shell
設置登錄環境
第 3 章89
LOGNAME ? 包含用戶名例如 terry
? 缺省值為 username
MAIL ? 確定系統查找郵件的位置基于用戶名設置例如 /var/mail/terry
? 典型的缺省值為 /var/mail/username
PATH ? 設置系統用于查找并執行命令的目錄
? 典型的缺省值包括以下路徑
/usr/bin:/usr/bin:/usr/contrib/bin:/usr/local/bin:/usr/lib
SHELL ? 決定運行的 shell 設置用于用戶登錄的 /etc/passwd 文件項的最后一個
字段如果未定義此字段將使用缺省值
? 典型的缺省值為 /usr/bin/sh
TERM ? 指定準備輸出的終端類型
? 典型的缺省值為 hp
TZ ? 提供當前時區及其與格林威治標準時間的差值缺省設置為山地標準時間
如果處于其他時區系統管理員應更改此值請使用腳本 /etc/profile
進行設置
? 典型的缺省值為 MST7MDT
EDITOR ? 確定缺省的編輯器
? 典型的缺省值為 vi
DISPLAY ? 指定窗口顯示主機請在遠程系統上使用以便在本地顯示窗口
? 典型的缺省值為 DISPLAY=:0
?
8? 登錄腳本總結
下表總結了每個 shell 的登錄腳本第一次登錄后所有腳本都將運行有關
POSIX C Key 和 Bourne Shell 的詳細信息請參閱Shells: User's Guide
表3-3 各種 Shell 及其登錄腳本
Shell??????????? 系統登錄腳本本地登錄腳本
POSIX???????? /etc/profile $HOME/.profile
C???????????????? /etc/csh.login $HOME/.cshrc
???????????????? $HOME/.login
Bourne?????? 已過時/etc/profile $HOME/.profile
使用 Shell
設置和引用變量
92 第 3 章
設置和引用變量
shell 使用環境變量和 shell 變量定義環境登錄 shell 使用環境變量并將這些
變量傳遞到所有進程和創建的 subshell 僅用戶當前的 shell 可以識別 Shell 變
量但這些變量不會被傳遞到 subshell
$ POSIX shell 使用賦值語句和可選的 export 命令設置變量在所有 shell 中
通過在變量名前加一個貨幣符號 ($) 來引用變量值
為變量賦值
在 POSIX shell 中可以為變量賦值或對變量進行設置如有必要還可
以創建變量使用賦值語句可以完成這兩項任務
name=value
name 表示變量名value 表示為變量賦的值name 和 = 之間或 = 和 value 之
間不允許有空格
在以下示例中將 shell 提示符 (PS1) 重新設置為
Ready ==>
如果 PS1 是 shell 變量則 subshell 通過鍵入 sh 創建不會識別新值如果
導出 PS1 PS1 的值將傳遞到 subshell
$ PS1="Ready ==> " 設置 shell 變量 PS1
Ready ==> sh 鍵入 subshell 名
$ exit Subshell 當前有缺省提示符退出到原始 shell
Ready ==> export PS1 使用 export 設置環境變量
Ready ==> sh 進入 subshell
Ready ==> Subshell 識別新的 PS1 值
Ready ==> exit 退出 subshell
Ready ==> PS1="$ " 使用 export 設置環境變量
$ 返回到正常的工作環境
使用 Shell
設置和引用變量
第 3 章93
引用變量的值參數替換
三種 shell 都使用參數替換引用變量值參數替換表示用變量值替換變量名
如果在變量名前加一個貨幣符號 ($) 即發生參數替換
例如在上文我們已了解到如何使用命令 echo $SHELL 確定登錄 shell
$ echo SHELL 由于省略 $ 將回顯單詞 SHELL
SHELL
$ echo $SHELL 如果加上 $ 將回顯 SHELL 的值
/usr/bin/sh
echo $SHELL 命令使用參數替換由于變量名前有貨幣符號 ($) 所以 shell 將
名為 SHELL 的環境變量值回顯在 echo 命令下
更多信息
有關參數替換的詳細信息請參考 sh sh-posix keysh 或 csh 聯機幫助頁
9?? 使用搜索路徑查找命令
PATH 鍵入命令后HP-UX 必須能夠找到包含命令的目錄才能運行該命令查找命令
時PATH 環境變量包含用戶希望 HP-UX 搜索的命令目錄列表PATH 應包含所
有必要的目錄以定位用戶使用的所有命令
PATH 變量格式
從 .profile 或 /etc/profile 登錄腳本讀取 PATH 變量此變量包含待搜索的
目錄列表中間用冒號分隔冒號前后不應有空格還可以按如下方式使用
echo 命令確定 PATH 的當前值
$ echo $PATH
/usr/bin/sh:/usr/bin:/usr/local/bin
此行內容表示鍵入命令后shell 首先在 /usr/bin/sh 目錄/usr/bin 目錄
和 /usr/local/bin 目錄下搜索該命令如果這些目錄下都沒有該命令shell
將顯示以下消息
command_name: 未找到
更改 PATH
如果 shell 無法找到確實存在的命令則有兩種選擇
1. 鍵入該命令的完整路徑名例如如果希望執行位于 /home/sue/bin 目錄
下的名為 prog 的命令請鍵入以下內容
$ /home/sue/bin/prog
2. 或者更改 PATH 變量的值以添加命令路徑如果經常使用此命令這將
是長久之計
下表列出了最常用的目錄的路徑名
目錄 內容
/usr/bin 常用的 HP-UX 命令
/usr/sbin 系統管理員使用的命令
/usr/bin/sh POSIX Shell
/usr/contrib/bin Hewlett-Packard 不支持第三方提供的程序
/usr/local/bin 在本地編寫的程序和命令
$HOME/bin 可以為自己的 shell 腳本和程序創建的目錄
使用 Shell
使用搜索路徑查找命令
第 3 章95
注意考慮到潛在危險請勿將當前目錄通常表示為 . 設置為 PATH 的第一個元
素請將當前目錄置于 PATH 之外或僅將其作為最后一個元素予以保留
切記按顯示從左到右順序搜索 PATH 中的目錄通常將最常用的目錄設
置為路徑的第一個元素 除非搜索路徑下有兩個同名的命令例如
/usr/bin/rm 和 $HOME/bin/rm 在本示例中如果想讓 shell 首先查找 rm 版
本請在 PATH 中將 $HOME/bin 置于 /usr/bin 之前
以下示例說明如何更改 PATH 以將 $HOME/bin 放在其他目錄前并將當前目
錄作為搜索路徑中的最后一個目錄此示例假設用戶使用的是 POSIX shell
$ echo $PATH
/usr/bin/sh:/usr/bin:/usr/bin:
/usr/contrib/bin:/usr/local/bin
$ PATH=$HOME/bin:$PATH:. 包含作為最后一個元素的. 使當前目錄成為
$ echo $PATH 最后一個搜索目錄
/home/terry/bin:/usr/bin/sh:/usr/bin:
/usr/bin:/usr/contrib/bin:/usr/local/bin:.
將 PATH 設置為環境變量
通常將 PATH 設置為環境變量以便在登錄時為其賦予適當的值在 Bourne 和
POSIX shell 中可以更改 .profile 腳本中的 PATH 并導出有關這些腳本的詳
細信息請參閱Shells: User's Guide
posted on 2006-10-18 12:46
有貓相伴的日子 閱讀(2980)
評論(0) 編輯 收藏 所屬分類:
linux/unix應用