標籤:
3.Shell輸入與輸出
3.1.echo
echo命令可以顯示文本行或變數,或者把字串輸出到檔案
echo [option] string
-e:解析逸出字元
-n:斷行符號不換行,linux系統預設斷行符號換行
逸出字元:\c,\f,\t,\n……
例子程式
#!/bin/bash#echoecho -e "This echo‘s 3 new lines\n\n\n"echo "OK"echoecho "This echo‘s 3 new lines \n\n\n"echo "This log files have all been done">mylogfile.txt
3.2.read
read語句可以從鍵盤或檔案的某一行文本中讀入資訊,並將其賦值給一個變數
read varible1 varible2...
如果只指定了一個變數,那麼read將會把所有的輸入賦值給該變數,直至遇到第一個檔案結束符或斷行符號;如果給出了多個變數,它們按順序分別被賦予不同的變數。shell將用空格作為變數之間的分隔字元
例子程式
#!/bin/bash#readecho -n "First Name:"read firstnameecho -n "Sub Name and Last Name:"read subname lastnameecho -e "Your First Name is: ${firstname}\n"echo -e "Your Sub Name is: ${subname}\n"echo -e "Your Last Name is: ${lastname}\n"
3.3.cat
cat是一個簡單而通用的命令,可以用它來顯示檔案內容、建立檔案,還可以用它來顯示控制字元
cat [options] filename1 ... filename2 ...
-v:顯示控制字元
使用cat命令式要注意,它不會在檔案分頁符處2停下來;它會一下顯示完整個檔案。如果希望每次顯示一頁,可以使用more命令或者把cat命令的輸出通過管道傳遞到另外一個具有分頁功能的命令(more、less)中
3.4.管道 |
可以通過管道把一個命令的輸出傳遞給另一個命令作為輸入。管道用豎杠|表示
格式:命令1 | 命令2
例子: ls -l | grep "myfile"
3.5.tee
tee命令把輸出的一個副本送到標準輸出,另一個副本拷貝到相應的檔案中
tee -a files
如果希望在看到這個輸出的同時,也將其存入一個檔案,那麼這個命令再適合不過了
一般用於管道之後。例子:ls | tee -a ls.txt 既將ls的命令結果輸出到標準輸出,又輸出到ls.txt檔案中
3.6.標準輸入、輸出和錯誤
在shell中執行命令時,每個進程都和三個開啟的檔案相聯絡,並使用檔案描述符來引用這些檔案。由於檔案描述符不容易記憶,shell同時給出了相應的檔案名稱
輸入檔案--標準輸入:0(預設是鍵盤,也可以是檔案或其他命令的輸出)
輸出檔案--標準輸出:1(預設是螢幕,也可以是檔案)
錯誤輸出檔案--標準錯誤:2(預設是螢幕,也可以是檔案)
系統中實際上有12個檔案描述符,可以任意使用檔案描述符3~9
3.7.檔案重新導向
改變程式啟動並執行輸入來源和輸出地點
command > filename:把標準輸出重新導向到一個新檔案中
command >> filename:把標準輸出重新導向到一個檔案中(追加)
command 1> filename:把標準輸出重新導向到一個檔案中
command > filename 2>&1:把標準輸出和標準錯誤一起重新導向到一個檔案中
command 2> filename:把標準錯誤重新導向到一個檔案中
command 2>> filename:把標準錯誤重新導向到一個檔案中(追加)
command >> filename 2>&1:把標準輸出和標準錯誤一起重新導向到一個檔案中(追加)
command < filename1 > filename2:command命令以filename1檔案作為標準輸入,以filename2作為標準輸出
command < filename:command命令以filename檔案作為標準輸入
command << delimiter:從標準輸入中讀入,直至遇到delimiter分解符
command <&m:把檔案描述符m作為標準輸入
command >&m:把標準輸出重新導向到檔案描述符m中
command <&-:關閉標準輸入
例子:
cat file } sort > sort.out 將file的字串(按每行)排序,並將排序結果輸出到sort.out檔案中
>nullfile 建立一個空檔案nullfile
sort < name.txt > name.out 將name.txt的內容作為輸入,排好序後,將結果輸出到name.out
cat file1 file2 1> file.txt 2> file.err 將cat file1 file2命令的標準輸出結果輸出到file.txt,將該命令的標準錯誤的輸出結果輸出到file.err,分開輸出(測試時,file1存在,file2不存在)
3.8.合并標準輸出和標準錯誤
合并標準輸出和標準錯誤的時候,切記shel是從左至右分析相應的命令的
例子:grep "example" example.txt > grep.out 2>&1 在example.txt裡面尋找"example"字串的內容,標準輸出輸出到grep.out檔案,並將標準錯誤也輸出到grep.out檔案
3.9.exec
exec命令可以用來替代當前shell;換句話說,並沒有啟動子shell,使用這一命令時任何現有環境都將被清除,並重啟一個shell
exec command:其中的command通常是一個shell指令碼
對檔案描述符進行操作的時候(也只有在這個時候),它不會覆蓋你當前的shell
Shell編程基礎教程3--Shell輸入與輸出