shell脚本编写之常用基础命令(diff、patch、cut、sort、uniq、与||、test、tr)
文章目錄
- 一、shell(計算機殼層)
- 二、shell中常用的基本命令
- 1、diff 命令(比對文件)
- 1.1 基本概念以及命令的格式
- 1.2 結果讀取方式
- 1.3 diff中常用的參數
- 2、patch命令(打補丁)
- 2.1基本概念以及命令的用法
- 2.2patch常用參數
- 3、cut命令(字符截取)
- 4、sort(字符排序)
- 5、uniq(處理重復的字符)
- 6、&&(表示true條件為真)命令和||(表示false條件為假)命令
- 7、test命令 (test 是 Shell 內置命令,用來檢測某個條件是否成立)
- 8、tr命令(轉換大小寫)
- 三、腳本
- 1、過濾出本機的ip
- 2、查看 / cpu% 使用率且超過 30% 報警,報警信息導入到日志
一、shell(計算機殼層)
- 在計算機科學中,Shell俗稱殼(用來區別于核),是指“為使用者提供操作界面”的軟件(命令解析器), 它類似于DOS下的command.com和后來的cmd.exe,它接收用戶命令,然后調用相應的應用程序,同時它又是一種程序設計語言,作為命令語言, 它交互式(從鍵盤輸入,并且可以立即得到響應)解釋和執行用戶輸入的命令或者自動地解釋和執行預先設定好的一連串的命令,作為程序設計語言,它定義了各種變量和參數,并提供了許多在高級語言中才具有的控制結構,包括循環和分支。在排序算法中,Shell是希爾排序的名稱 簡單來說,其實shell就是用戶和系統交互的工具。
- shell包在Linux內核的外面,為用戶和內核之間的交互提供了一個接口。
- shell腳本:腳本是一種解釋型語言,用shell腳本保存執行動作,用腳本判定命令的執行條件,用腳本來實現動作的批量執行
- 交互式模式 :shell等待你的輸入,并且執行你提交的命令
- 非交互式模式: 在這種模式下,shell不與你進行交互,而是讀取存放在文件中的命令,并且執行它們,當它讀到文件的結尾,shell也就終止了,也就是一個自動執行的腳本
二、shell中常用的基本命令
1、diff 命令(比對文件)
1.1 基本概念以及命令的格式
- diff 命令是用來比較兩個文件或目錄的不同,夠借由 diff 創建的分析檔,以處理補丁(patch)功能的文件
diff file1 file2 | 比較兩個文件的不同之處
diff direcory1 directory2 | 比較兩個目錄的不同之處
1.2 結果讀取方式
[num1,num2][a|c|d][num3,num4]
- num1,num2 表示在第一個文件中的行數 num3,num4 表示在第二個文件中的行數
- a表示添加 ----add; c表示更改 ----change ;d 表示刪除 ----delete
- < 表示第一個文件中的內容 ; > 表示第二個文件中的內容 ; — 分割線
- 2,4c2,4 表示改變第一個文件中的第二行和第四行才能匹配第二個文件中(表示第一個文件和第二個文件的不同之處在于第二行和第四行)
1.3 diff中常用的參數
| -b 或 --ignore-space-change | 不檢查空格字符的不同 |
| -B 或 --ignore-blank-lines | 不檢查空白行 |
| -c | 顯示全部內文,并標出不同之處 |
| -i 或 --ignore-case | 不檢查大小寫的不同 |
| -p | 若比較的文件為 C 語言的程序碼文件時,顯示差異所在的函數名稱 |
| -q 或 --brief | 僅顯示有無差異,不顯示詳細的信息 |
| -r 或 --recursive | 比較子目錄中的文件 |
| -u | 以合并的方式來顯示文件內容的不同 |
- -q和-c的不同之處 ,-c更智能一些
實驗 :
(1)diff file1 file2
(2)diff -b file1 file 對比忽略空格
(3)diff -B file1 file 對比忽略空行
(4)diff -c file1 file 顯示全部,并用+,!標出不同之處
(5)diff -i file1 file 對比忽略大小寫
(6)diff -q file1 file 對比僅顯示有無差異,不顯示詳細信息
(7)diff -r /ranran/file1 /ranram/file 遞歸比較子母錄中的文件
(8)diff -u file2 file1
2、patch命令(打補丁)
2.1基本概念以及命令的用法
- 用于不同文件打布丁,這個指令常與 diff 配合使用,先比較新舊版本的差異,并將差異檔制作成為補丁文件,再由補丁文件更新舊文件。
- patch指令讓用戶利用設置修補文件的方式,修改,更新原始文件。倘若一次僅修改一個文件,可直接在指令列中下達指令依序執行如果配合修補文件的方式則能一次修補大批文件,這也是Linux系統核心的升級方法之一。
- 打補丁的軟件: patch
patch [options] file.old(舊文件) file.path(補丁文件)
2.2patch常用參數
| -b或–backup | 備份每一個原始文件。在修補文件時,重命名或復制原始文件,而不是刪除它 |
| -p | 后面可以接“取消幾層目錄”的意思。 |
| -R | 代表還原,將新的文件還原成原來舊的版本 |
(1)yum install patch -y 安裝打補丁的軟件
(2)diff -u file1 file2 >file.path 生成補丁文件
(3)patch -b file1 file.path 修補文件test1
3、cut命令(字符截取)
- cut 命令從文件的每一行剪切字節、字符和字段并將這些字節、字符和字段寫至標準輸出。
| cut -d | 指定分隔符 |
| cut -f 1,7 | 截取1和7列 |
| cut -c 1,4 | 1-4 指定截取的字符位置 |
(1)cut -d :-f 1 passwd 截取以:為分隔符的第一列
(2)cut -d :-f 1-3 passwd 截取以:為分隔符的第1列到第3列
(3)cut -d :-f 1,3 passwd 截取以:為分隔符的第1列和第3列
(4)cut -c 1,3 passwd 截取第1個和第3個字符
(5)cut -c 1-3 passwd 截取第1個到第3個字符
4、sort(字符排序)
| sort -n | 純數字排序 |
| sort -r | 倒序 |
| sort -u | 去掉重復數字 |
| sort -o | 輸出到指定文件中 |
| sort -t | 指定分隔符 |
| sort -k | 指定要排序的列 |
(1)sort file 僅對第一列數字排序
(2)sort -n file 對數字排序
(3)sort -nr file 對數字倒序排序
(4)sort -nru file 去掉重復的數字且對數字倒序排序
(5)sort -nru file -o test 指定排序結果到test文件中
(6)sort -t(指定分隔符) : -k(指定列) 3 -n passwd 對以:為分隔符的第3列數字進行排序
5、uniq(處理重復的字符)
| uniq -u | 顯示唯一的行 |
| uniq -d | 顯示重復的行 |
| uniq -c | 每行顯示一次并統計重復次數 |
(1)sort -n file | uniq -c 每行僅顯示一次,并且顯示出現的次數
(2)sort -n file | uniq -d 顯示重復的行并且進行排序
(3)sort -n file | uniq -u 顯示唯一的行并且排序
6、&&(表示true條件為真)命令和||(表示false條件為假)命令
- &&命令:用來執行條件成立后執行的命令
- ||命令: 用來執行條件不成立后執行的命令
7、test命令 (test 是 Shell 內置命令,用來檢測某個條件是否成立)
- test “A"=="A" == "A"=="B” 等同 [ “A"=="A" == "A"=="B” ]
| [ “A"="A" = "A"="B” ] | 相等 |
| [ “A"!="A" != "A"!="B” ] | 不相等 |
| [ “A"?eq"A" -eq "A"?eq"B” ] | 等于 |
| [ “A"?ne"A" -ne "A"?ne"B” ] | 不等于 |
| [ “A"?le"A" -le "A"?le"B” ] | 小于等于 |
| [ “A"?lt"A" -lt "A"?lt"B” ] | 小于 |
| [“A"?ge"A" -ge "A"?ge"B” ] | 大于等于 |
| [“A"?gt"A" -gt "A"?gt"B” ] | 大于 |
| [“A"?ne"A" -ne "A"?ne"B” -a “A"?gt"A" -gt "A"?gt"B” ] | 與條件(必須條件都滿足才成立) |
| [“A"?ne"A" -ne "A"?ne"B” -o “A"?gt"A" -gt "A"?gt"B” ] | 或條件(至少有一個條件滿足才成立) |
| [-z “$A” ] | 判斷是否為空,空為真,非空為假 |
| [-n “$A” ] | 和條件相反就是真,非空為真,空為假 |
| [“file1” -ef “file2” ] | 判斷前后兩個文件是否互相為硬鏈接 |
| [“file1” -nt “file2” ] | 判斷前面的硬鏈接是否與新 |
| [“file1” -ot “file2” ] | 判斷前面的硬鏈接是否舊 |
| [-e “file” ] | 判斷文件是否存在 |
| [-f “file” ] | 判斷文件是否為普通文件 |
| [-L “file” ] | 是否為軟鏈接 |
| [-S “file” ] | 判斷是否為套接字 |
| [-b “file” ] | 判斷是否為塊設備 |
| [-d “file” ] | 判斷是否為目錄 |
| [-c “file” ] | 判斷是否為字符設備 |
(1)[ “A"="A" = "A"="B” ] A等于B
(2)[ “A"?eq"A" -eq "A"?eq"B” ] A等于B
(3)[ “A"!="A" != "A"!="B” ] A不等于B
(4)[ “A"?ne"A" -ne "A"?ne"B” ] A不等于B
(5)[ “A"?ge"A" -ge "A"?ge"B” ] A大于等于B
(6)[ “A"?gt"A" -gt "A"?gt"B” ] A大于B
(7)[ “A"?le"A" -le "A"?le"B” ] A小于等于B
(8)[ “A"?lt"A" -lt "A"?lt"B” ] A小于B
(9)[ -z “$A” ] 字符串的長度為空
(10)[ -n “$A” ] 字符串的長度非空
8、tr命令(轉換大小寫)
三、腳本
1、過濾出本機的ip
(1)方法一
(2)方法二
(3)方法三
2、查看 / cpu% 使用率且超過 30% 報警,報警信息導入到日志
總結
以上是生活随笔為你收集整理的shell脚本编写之常用基础命令(diff、patch、cut、sort、uniq、与||、test、tr)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: COMSOL电化学专题培训通知
- 下一篇: 创业者应警惕可疑的成功