Shell入门02
Shell入門-02
1.重定向 標準輸入(<) 標準輸出 標準錯誤重回定向
???????? 程序 = 指令 + 數據
????????????????????????? 命令?? 變量
???????? 在程序中,數據如何輸入?又如何輸出?
???????? 數據輸入:鍵盤 – 標準輸入,但是并不是唯一輸入方式
?????????????????????????????????? --stdin
?????????????????????????????????? 不進入交互式界面,直接輸入密碼
?????????????????????????????????? echo “123456” | passwd –stdin “username”
?????????????????????????????????? 例如:功能添加用戶,useradd.sh user.txt文本文檔1000個用戶
??????????????????????????????????????????? ? ./useradd.sh? <? user.txt
??????????????????????????????????????????? ? while line ; do
???????????????????????????????????????????????????????????? 循環體 $line
??????????????????????????????????????????? ? done? <? /etc/passwd
???????? 數據輸出:顯示器 – 標準輸出,但并不唯一輸出方式
????????????????????????? ?? ls /etc/ > a.txt
???????? fd文件標識符 0-9 ---- 相當于給文件分類;
????????????????? 被定義的標識符 0—標準輸出? 1—標準輸入? 2—標準錯誤(錯誤輸入輸出)
???????? 常見的重定向的符號:
????????????????? 1.標準輸出
????????????????????????? 0>? ???????? --????? 覆蓋重定向、非常的危險 重定向后數據將會丟失
????????????????????????? set –C ??? 關閉重定向功能,剪掉C的功能 C的功能就是去掉重定向
????????????????????????? set +C????? 加上重定向
????????????????????????? >|???????????? 強制重定向
????????????????????????? >>? ???????? --????? 追加重定向 將數據內容追加到文件末尾? 不覆蓋
???????? ????????????????????????? ??? less more
?????????????????????????????????? ??? cat a.txt | more/less
????????????????? 2.標準輸入
????????????????????????? 1<???????????? a < b? b的內容交給a
??????????????????????????????????????????? tr 替換 ?tr set [set2]? ??默認進入交互式界面手動輸入替換內容
???????????????????????????????????????????????????????????? tr set [set2] < file.txt
??????????????????????????????????????????? tr abc ABC < /etc/passwd
???????????????????????????????????????????????????? |? |
?????????????????????? 單個字符
??????????????????????????????????????????? tr abc ABC < /etc/passwd > /etc/passwd
<<???????????? cat 查看,將多行數據同時輸入
??????????????????????????????????????????? cat >> a.txt <<EOF
??????????????????????????????????????????? >1
??????????????????????????????????????????? >2
??????????????????????????????????????????? >3
??????????????????????????????????????????? >EOF
????????????????? 3.錯誤輸出
?????????????????????????????????? 2>??? 2>>
?????????????????????????????????? 擴展:不需要輸出內容,只需要輸出狀態;
??????????????????????????????????????????? ?? ls /etc/ > /dev/null 2> /dev/null
??????????????????????????????????????????? ?? if [$? –eq 0];then
???????????????????????????????????????????????????????????? 循環體
??????????????????????????????????????????? ?? fi
??????????????? &> &>> == 2&>1
?????????????????????????????????? ???????? ?? ls /etc/ &> /dev/null
2.管道符 – tee
???????? command1|command2|command3|… …
???????? 前一個命令的執行結果交給后一個命令來執行;
???????? 【linux思想:結合小功能實現大功能】
????????????????????????? free –m
????????????????????????? m? --- 單位
free –m|grep “^Mem” | cut –d’ ’ –f19
free –m|grep “^Mem” | awk ‘{print $3}’
s = ` free –m|grep “^Mem” | cut –d’ ’ –f19`
if [$s –gt 1000];then
???????? 告警
fi
tee命令
?????? 一路輸入,兩路輸出
?????? Tee /tmp/tee.out //如果沒有文件會創建,如果默認文件有內容會覆蓋
?
練習:
將/etc/passwd文件中的前5行內容轉換為大寫后保存至/tmp/passwd.out文件中;
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
將登錄至當前系統上用戶信息匯總的后3位信息轉換為大寫后保存至/tmp/who.out文件中;
who | tail -3 | cut –d’ ’ –f1 |? tr [[:lower:]] [[:upper:]] ?| ?tee /tmp/who.out
tail? 查看文件尾部多少行(默認10行)
????????????? -n tail –n 5 /etc/passwd = tail -5 /etc/passwd
-f 實時查看文件更新查看
Sleep? 等待多長時間后再執行
????????????? tail –f /vaar/log/message
head? 查看文件頭部多少行(默認10行)
????????????? -n head –n 5 /etc/passwd = head -5 /etc/passwd
head -20 /etc/passwd | tail -10
3.文本處理工具---wc,cut,sort,uniq
wc
???????? Word count 統計文本文件中的字符個數
????????
???????? 行數14 字符個數72 文件大小711字節 文件大小
???????? –c 文件大小
???????? -l? 看行數
???????? -w 字符個數
cut
???????? 用來做文件分割
???????? -d 指定分隔符(單個) (delimiter)
???????? -f 指定多少列數 –f2輸出第二列
?????????????????????????????????? ?? -f1,3輸出第一列到第三列
?????????????????????????????????? ?? -f1-3
???????? ???????? history | cut –d’ ’ –f3 /etc/passwd
???????? --output-delimiter=’xx’
????????????????? cut –d’ ’ –f1,3 /etc/passwd
?
cut –d’:’ –f1,3 –output-delimiter=’????????? ’ /etc/passwd
格式化輸出
?
Cut的局限性:
**-d 指定分隔符不能同時指定多個**
**不能做高級的格式化輸出**?????????? 需要熟練掌握awk
sort
???????? 排序命令,默認將第一個字符(數字、字母、特殊符號、空格)按照ASCII碼值來進行排序
???????? -n 按照數值大小排序 特殊字符和字母在數字前面
???????? -r 倒序排列
-f 忽略字符大小寫
-k 已指定字段的第幾段進行排序
-u uniq 排序去重復,重復的不顯示
-t指定字段分隔符
uniq
?
連續且相同,才被視為重復
建議,先排序后去重
???????? Uniq? –c 統計某些字符重復的次數
????????????????? ? Sort filename | uniq –c
????????????????? ? -d 重復的行
練習:
顯示/etc/passwd的第六行到第十行,按照第三個字段進行數值大小排序,最后顯示第一列
?
轉載于:https://www.cnblogs.com/KAJIA1/p/11314854.html
總結
- 上一篇: Python自动化运维技术与最佳实现
- 下一篇: 再谈新浪微博架构——视频观后笔记