UNIX Shell 編程(2)

來源:互聯網
上載者:User

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
mon
users
wb
wbb2
wbx
writeback

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 < users
9

管道
統計當前登陸進系統的使用者數:
[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進程啟動時間,以及命令參數。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.