Linux下的I/O與管道
1. 標準輸入輸出
2.輸入輸出重定向
3.tr命令
4. 管道和tee
5.練習
1、標準輸入輸出
(1)linux 給程序提供三種I/O設備
標準輸入 :(STDIN) — 0 默認接受來自鍵盤的輸入
標準輸出 :(STDOUT) — 1 默認輸出到終端窗口
標準錯誤 :(STDEER) — 2 默認輸出到終端窗口
(2)輸入設備有:鍵盤、鼠標、掃描儀、攝像頭等
輸出設備有:打印機、顯示器、投影儀等
2、輸入輸出重定向
〉正確輸出
2〉錯誤輸出
&〉全部輸出(覆蓋重定向)
>文件內容會被覆蓋
set -C :禁止將內容覆蓋已有文件,但可追加
>| file :強制覆蓋
set +C 允許覆蓋
>> 原有內容基礎上,追加內容
文件不存在時,>和>> 都能創建新文件,文件已存在時 >表示覆蓋,>>表示追加
2>&1 把錯誤的結果轉成正確的結果
1>&2 把正確的結果轉成錯誤的結果
():合並多個程序的STDOUT
cal 2007;cal 2008
(cal 2007 ; cal 2008 ) >all.txt
** 3、tr命令
tr 轉換和刪除字符
tr [OPTION] ....SET1[SET2]
選項:
-c -C --complement:取字符集的補集
-d --delete:刪除所有屬於第一個字符集的字符
-s --squeeze-repeats:把連續重復的字符以單獨的一個字符表示
-t --truncate-set1:將第一個字符集對應字符轉換為第二字符集對應的字符
從文件中導入STDIN
(1) 使用<來重定向標準輸入
(2)某些命令能夠接受從文件中導入的STDIN
Tr ‘a-z’ ‘A-Z’< /etc/issue 該命令會把/etc/issue中的小寫字符都轉換成大寫字符
(3) tr -d abc < /etc/fstab
(4) cat > file
Mage
wangxiaochun
按ctrl+d離開,可以使用文件來代替鍵盤的輸入
使用“<<終止詞”把多行重導向給STDIN
4、管道和tee
使用符號“|”表示,用來連接命令
命令1 | 命令2 | 命令3 ...
組合多種工具的功能:
ls | tr `a-z` `A-Z`
less : 一頁一頁的查看輸入 ls -l /etc | less
mail :通電子郵件發送輸入 echo "test email" | mail -s "test" [email protected]
tee:從標準輸入讀取,寫入到標準輸出,並保存到文件中
5、練習
1、計算1+2+3+..+99+100的總和
echo 1+2|bc echo {1..100} echo {1...100} |tr " "+|bc
2、 一個linux用戶給root發郵件,要求郵件標題為”help”,郵件正文如下:Hello, I am 用戶名,The system version is here,please help me to check it ,thanks操作系統版本信息
echo -e Hello,I am `whoami`,The system version is here,Please help me to check it,Thanks."\n"`cat /etc/redhat-release` | mail -s help root
3、將當前系統登錄用戶的信息轉換為大寫後保存至/tmp/who.out文件中
who | tr [a-z] [A-Z] > /tmp/who.out
4、將/etc/issue文件中的內容轉換為大寫後保存至/tmp/issue.out文件中
cat /etc/issue |tr a-z A-Z > /tmp/issue.out
6、處理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的數字和空格
echo "xt.,l 1 jr#hat-releasemn 2 c*/fe 3 uz 4" | tr -cd [:digit:][:blank:]
7、將PATH變量每個目錄顯示在獨立的一行
echo $PATH |tr : "\n"
Linux下的I/O與管道