UNIX Shell 程式設計 2

2021-04-26 16:04:08 字數 3855 閱讀 4072

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...