1.echo 將一行字串顯示到標準輸出
0) echo 命令的一些細節在 System V、BSD 和 Linux 這三種 Like-UNIX 系統上不同,這裡以 Linux 系統為主。
1) Usage: echo [-e] [-n] STRING
① STRING : STRING 是要輸出的字串,其中可以包含 shell 變數名、轉義符等,一般用雙引號括起來。
② -e : Linux 的 echo 預設不解釋 STRING 中的轉移符,除非加上此選項。
③ -n : echo 預設在輸出 STRING 後輸出 NEWLINE(換行),使用此選項 echo 將不輸出 NEWLINE。
2) echo 支援的轉移符:
/NNN ASCII 碼為 NNN(8 進位)的字元,NNN 如果不是一個合理的值,將直接按照字面列印
/a 響鈴 /b 退格 /c 去除結尾 NWELINE 字元
/f 換頁 /n 換行 /r 斷行符號
/t 水平定位字元 /v 垂直定位字元 // 反斜線
3) 舉例: echo -e "User: $USER/tUID: $UID" // 顯示 User: zqf UID: 500
2.read 從鍵盤或檔案的某一行文本中讀入資訊,並將其賦給變數。
1) Usage: read varible1 varible2 ...
2) 如果只指定了一個變數,read 將會把輸入行的所有內容賦給該變數,直至遇到第一個檔案結束符或斷行符號。
3) 如果指定了多個變數,read 用空格(環境變數 IFS)作為分隔字元把輸入行分成多個域,分別賦給各個變數。
4) 輸入文本分隔出的域數量多於 read 給出的變數數,read 將所有的超長部分賦予最後一個變數。 3.cat 一個簡單而通用的命令,可以用它來顯示檔案內容,建立檔案,還可以用它來顯示控制字元。
1) 顯示檔案內容: cat myfile | more // cat 命令不會在檔案分頁符處停下,它會一下顯示完整個檔案
2) 建立檔案: cat file1 file2 file3 > bigfile // 建立一個名為 bigfile 的檔案,包含三個檔案的內容
cat >myfile // 建立一個新檔案,並向其中輸入一些內容,輸入完後按結束輸入
3) 顯示檔案中控制字元: cat -v filename 4.管道 可以通過管道把一個命令的輸出傳遞給另一個命令作為輸入。管道用豎杠"|"表示。
1) Usage: command1 | command2
2) 舉例: ls | grep "*.c" // 將 ls 命令的輸出作為 grep 命令的輸入,即在目前的目錄下搜尋 C 來源程式檔案
3) sed、awk 和 grep 等程式都很適合用管道,特別是在 shell 命令列下。 5.tee 它把輸出的一個副本輸送到標準輸出,另一個副本拷貝到相應的檔案中
1)Usage: tee -a filename
① -a : 表示追加到檔案末尾。
② tee 命令應該和管道結合使用
2) 舉例: who | tee who.out // who 命令的輸出不僅會輸出到標準輸出,還會輸入到檔案 who.out 6.標準輸入、輸出和錯誤
1) 檔案描述符: 檔案描述符是從 0 開始的整數,指向與進程相關的特定資料流。當進程啟動時,通常開啟三
個檔案描述符,分別對應三種標準的 I/O: 標準輸入(檔案描述符 0),標準輸出(檔案描述符 1),標準錯誤(文
件描述符 2)。
2) 標準輸入(STDIN) : 它是命令的輸入,預設和終端的鍵盤關聯。
3) 標準輸出(STDOUT): 它是命令的輸出,預設和終端的螢幕關聯。
4) 標準錯誤(STDERR): 它是命令的錯誤資訊輸出,預設也和終端的螢幕關聯。
5) 如果進程開啟了額外的檔案進行輸入和輸出,則其被設定為下一個可用的檔案描述符,從 3 到 9。 7.檔案重新導向
1) 在執行命令時,命令的標準輸入、輸出和錯誤是和檔案描述符 0、1、2 關聯的,而檔案描述符 0、1、2 預設都和終端關聯。如果希望命令從檔案中讀取標準輸入或者希望命令的標準輸出寫到檔案而不是螢幕,就需要使用檔案重新導向。
2) 重新導向標準輸出
① CMD > filename : 把 CMD 命令的標準輸出重新導向到一個檔案中(如果檔案存在,其內容將被覆蓋)。
② CMD >> filename : 把 CMD 命令的標準輸出重新導向到一個檔案中(追加檔案尾部)。
③ > myfile : 建立一個長度為 0 的空檔案,如果檔案存在清空該檔案。
④ 舉例: ls -l | grep ^d >>files.out // 把目前的目錄下的子目錄的列表寫到檔案 files.out中
> zqf.log // 清空記錄檔 zqf.log
⑤ CMD > filename 實際上是和 CMD 1> filename 等效,CMD >> filename 和 CMD 1>> filename 等效。
3) 重新導向標準輸入
① CMD < filename : 以 filename 檔案作為 CMD 命令的標準輸入。
② CMD << DELIMITER : 從標準輸入中讀入輸入,直至遇到 DELIMITER 分界符。(here-document)
③ 舉例: sort < grade.txt // 對檔案 grade.txt 進行排序(sort)
④ CMD < filename 實際上是和 CMD 0< filename 等效,CMD << filename 和 CMD 0<< filename 等效。
4) 重新導向標準錯誤
① CMD 2 > filename : 把 CMD 命令的標準錯誤重新導向到一個檔案中(如果檔案存在,其內容將被覆蓋)。
② CMD 2 >> filename : 把 CMD 命令的標準錯誤重新導向到一個檔案中(追加檔案尾部)。
③ 舉例: find / -name "*.tmp" -exec rm -rf {} /; 2>/dev/null // 把命令的錯誤訊息輸出丟棄
5) 結合使用標準輸出和標準錯誤
① CMD 1> file1 2> file2 : 將輸出重新導向到 file1 中,並把標準錯誤重新導向到 file2 中。
② CMD < file1 > file2 : 以 file1 檔案作為 CMD 命令的標準輸入,以 file2 檔案作為標準輸出。
③ 舉例: find / -name "*.tmp" -print 1>find.out 2>find.err // 把 find 的搜尋結果寫到檔案
find.out 中,而把 find 命令的錯誤資訊(比如沒有足夠許可權搜尋某些目錄)寫到檔案 find.err 中
cat 2.txt // 實際是將 1.txt 的內容寫到 2.txt,等效於檔案複製
6) 合并標準輸出和標準錯誤
① CMD > filename 2>&1 : 把標準輸出和標準錯誤一起重新導向到一個檔案中
② CMD >> filename 2>&1 : 把標準輸出和標準錯誤一起重新導向到一個檔案中(追加)
③ 舉例: grep "standard" * > grep.out 2>&1 // 在目前的目錄下所有文字檔中搜尋字串"standard"
④ CMD > filename 2>&1 實際上可以看作 2 部分,"> filename"(重新導向標準輸出)和"2>&1"(把標準錯誤重
定向到標準輸出)。
7) 在使用一些接受檔案名稱為參數的命令時,有時命令會把檔案描述符當成是檔案名稱參數而報錯。一般檔案描
述符和重新導向符號之間留有不要有空格。