unix shell 程式設計(2)
字元匹配
星號(*)匹配0個以上的字元;而問號(?)則匹配1個字元。
如:ls [a-z]*[0-9]
表示顯示檔名以小寫字母開始,且以數字結尾的檔案列表。
輸出重定向
命令的輸出一般是提交到標準輸出裝置,可以轉向到檔案內,這叫輸出重定向。
在有標準輸出的命令後,新增》file符號後,命令的輸出就會寫入檔案file。
如:[root@localhost misc]# who
root pts/1 2009-04-14 09:39 (10.3.34.117)
fedora tty7 2009-04-14 10:44 (:0)
[root@localhost misc]# who >users
[root@localhost misc]# ls
collect mon users wb wbb2 wbx writeback
[root@localhost misc]# cat users
root pts/1 2009-04-14 09:39 (10.3.34.117)
fedora tty7 2009-04-14 10:44 (:0)
另一種型別的輸出重定向,由字元》表示,它意思是命令的輸出從標準輸出追加到指定的檔案後面。因此,檔案以前的內容不會丟失,新的輸出新增到最後。
如:[root@localhost misc]# cat users
root pts/1 2009-04-14 09:39 (10.3.34.117)
fedora tty7 2009-04-14 10:44 (:0)
[root@localhost misc]# ls
collect mon users wb wbb2 wbx writeback
[root@localhost misc]# ls >>users
[root@localhost misc]# cat users
root pts/1 2009-04-14 09:39 (10.3.34.117)
fedora tty7 2009-04-14 10:44 (:0)
collect
monusers
wbwbb2
wbxwriteback
shell能識別一種特別格式的輸出重定向,如果輸入:
> file
前面沒有命令,shell會建立乙個空檔案(長度為0字元),如該檔案以前存在,其內容會丟失。
如:[root@localhost misc]# >file4
[root@localhost misc]# wc file4
0 0 0 file4
[root@localhost misc]# cat file3
this is in file1.
this is in file2.
this is in file1.
[root@localhost misc]# >file3
[root@localhost misc]# wc file3
0 0 0 file3
輸入重定向
同輸出重定向,命令的輸入也可重定向為來自於檔案。用大於號》表示輸出重定向,用小於號表示輸入重定向。
如:[root@localhost misc]# wc -l users
9 users
[root@localhost misc]# wc -l < users9管道
統計當前登陸進系統的使用者數:
[root@localhost misc]# who >users
[root@localhost misc]# wc -l < users
2表明有2個使用者登陸了系統。在任何適合如果想知道有多少登陸使用者,都可以使用此命令序列。
還有一種方法來判斷登陸使用者數而不需要使用檔案。
unix系統可以把兩條目錄的效果連線起來,這種連線稱為管道。
管道可以把一條命令的輸出直接作為另一條命令的輸入。
管道效果由字元 | 實現,它必須在兩條命令之間。
故統計登陸使用者數可以這麼實現:
[root@localhost misc]# who | wc -l
2在兩條命令間建立管道後,第一條命令的標準輸出就直接連線到第二條命令的標準輸入。
如統計當前目錄的檔案數:
[root@localhost misc]# ls | wc -l
11過濾器
unix所指的過濾器是指能夠從標準輸入中接受輸入,對輸入進行處理後,把結果寫入標準輸出的任何程式。
命令cat和sort是過濾器,而who、date、cd、pwd、echo、rm、mv及cp都不是。
標準錯誤
除標準輸入和標準輸出之外,還有一種標準裝置,稱之為標準錯誤。
標準錯誤預設也是終端。
如:[root@localhost misc]# ls n*
ls: cannot access n*: no such file or directory
見上面,「cannot access...」資訊實際上是由ls命令寫入標準錯誤,而非標準輸出。
[root@localhost misc]# ls n* > foo
ls: cannot access n*: no such file or directory
儘管輸出重定向到檔案foo,該資訊仍然在終端顯示了。且:
[root@localhost misc]# wc foo
0 0 0 foo
foo檔案為空。
標準錯誤也可重定向到檔案,格式為:
命令 2> 檔案
注意:2和》之間不能有空格。
如:[root@localhost misc]# ls n* 2> foo
[root@localhost misc]# cat foo
ls: cannot access n*: no such file or directory
一行可以鍵入多條命令,命令間用分號分隔。
比如既檢視當前時間又檢視當前工作目錄:
[root@localhost misc]# date;pwd
tue apr 14 11:29:15 cst 2009
/tools/test/misc
命令傳送到後台
有些命令執行時間很長,可以放到後台執行。在鍵入的命令之後跟乙個&符號,該命令就傳送到後台執行。
如:[root@localhost misc]# sort file3 > out & #sort發往後臺執行
[2] 30584 # 程序id
此時,終端可立即做其它工作。
[2] 30584 解釋:第乙個稱為該命令的工作號,第二個是程序標識號。
可以用ps命令檢視:
[root@localhost misc]# ps
pid tty time cmd
2303 pts/1 00:00:00 bash
30354 pts/1 00:00:00 sort
30589 pts/1 00:00:00 ps
[2]- done sort file3 > out
ps可以顯示系統中正執行的程序的資訊。
pid程序標識號,tty程序終端號,time程序已執行的時間,cmd程序名。
如果加上-f選項,將顯示更詳細內容。
[root@localhost test]# ps -f
uid pid ppid c stime tty time cmd
root 30665 30657 0 12:30 pts/2 00:00:00 -bash
root 30775 30665 0 13:17 pts/2 00:00:00 ps -f
注:ppid父程序的標識號,stime程序啟動時間,以及命令引數。
UNIX Shell 程式設計 2
unix shell 程式設計 2 字元匹配 星號 匹配0個以上的字元 而問號 則匹配1個字元。如 ls a z 0 9 表示顯示檔名以小寫字母開始,且以數字結尾的檔案列表。輸出重定向 命令的輸出一般是提交到標準輸出裝置,可以轉向到檔案內,這叫輸出重定向。在有標準輸出的命令後,新增 file符號後,...
UNIX Shell 程式設計 1
unix shell 程式設計 1 unix只能識別3種基本的檔案型別 普通檔案 目錄檔案和特殊檔案。普通檔案 any file on the system that contains data,test,program instructions,or just about anything els...
UNIX Shell 程式設計 1
unix shell 程式設計 1 unix只能識別3種基本的檔案型別 普通檔案 目錄檔案和特殊檔案。普通檔案 any file on the system that contains data,test,program instructions,or just about anything els...