linux shell 指令碼攻略第3版 讀書筆記

2021-08-31 03:02:09 字數 2214 閱讀 5989

第2章

1shell會擴充套件沒有引號或是出現在雙引號(")中

的萬用字元。單引號能夠阻止shell擴充套件*.txt,使得該字串能夠原封不動地傳給find命令。

2find 命令 如果需要用到正規表示式使用單引號''

例如:查詢/home/slynux下面 所有以txt結尾的檔案並列印出來

find /home/slynux -name '*.txt' -print

find命令有乙個選項-iname(忽略字母大小寫)

3–newer選項可以指定乙個用於比較修改時間的參考檔案,然後找出比參考檔案更新的(更

近的修改時間)所有檔案。

例如,找出比file.txt修改時間更近的所有檔案:

$ find . -type f -newer file.txt -print

find命令的時間戳處理選項有助於編寫系統備份和維護指令碼。

你必須以root使用者的身份執行find命令才能夠更改檔案或目錄的所有權。

4下列命令可以將10天前的 .txt檔案複製到old目錄中:

$ find . -type f -mtime +10 -name "*.txt" -exec cp {} old \;

5我們無法在-exec選項中直接使用多個命令。該選項只能夠接受單個命令,

不過我們可以耍乙個小花招。把多個命令寫到乙個shell 指令碼中( 例如

command.sh),然後在-exec中使用這個指令碼:

-exec ./commands.sh {} \;

6使用find命令的-print0選項生成以空字元('\0')作為分隔符的輸出,然後將其作為

xargs命令的輸入。

下列命令會查詢並刪除所有的.txt檔案:

$ find . -type f -name "*.txt" -print0 | xargs -0 rm -f

刪除以html結尾的10天前的檔案,包括帶空格的檔案:

find /usr/local/backups -name "*.html" -mtime +10 -print0 |xargs -0 rm -rfv

find /usr/local/backups -mtime +10 -name "*.html" -exec rm -rf {} \;

find -print 和 -print0的區別:

-print 在每乙個輸出後會新增乙個回車換行符,而-print0則不會。

第4章有一種值得推薦的做法是先使用不帶-i選項的sed命令,以確保正規表示式

沒有問題,如果結果符合要求,再加入-i選項將更改寫入檔案。另外,你也可

以使用下列形式的sed:

sed -i.bak 's/abc/def/' file

這時的sed不僅替換檔案內容,還會建立乙個名為file.bak的檔案,其中包含

著原始檔案內容的副本。

awk指令碼的結構如下:

awk 'begin pattern end' file

awk命令也可以從stdin中讀取輸入。

awk指令碼通常由3部分組成:begin、end和帶模式匹配選項的公共語句塊(common statement

block)。這3個部分都是可選的,可以不用出現在指令碼中。

awk以逐行的形式處理檔案。begin之後的命令會先於公共語句塊執行。對於匹配pattern

的行,awk會對其執行pattern之後的命令。最後,在處理完整個檔案之後,awk會執行end之後

的命令。

簡單的awk指令碼可以放在單引號或雙引號中:

awk 'begin end '

或者awk "begin end "

下面的命令會輸出檔案行數:

$ awk 'begin end ' filename

或者$ awk "begin end " filename

以下是awk可以使用的一些特殊變數。

 nr:表示記錄編號,當awk將行作為記錄時,該變數相當於當前行號。

 nf:表示字段數量,在處理當前記錄時,相當於字段數量。預設的字段分隔符是空格。

 $0:該變數包含當前記錄的文字內容。

 $1:該變數包含第乙個欄位的文字內容。

 $2:該變數包含第二個欄位的文字內容。

awk預設讀取檔案中的所有行。如果只想讀取某一行,可以使用getline函式。

awk、grep和sed都可以根據條件列印部分行。最簡單的方法是使用grep列印匹配模式的行。

不過,最全能的工具還是awk。

Linux Shell指令碼攻略(三)

一.find命令 1.根據檔名或正規表示式匹配搜尋 2.基於目錄深度的搜尋 maxdepth mindepth 3.根據檔案型別搜尋 4.根據檔案時間搜尋 atime 訪問時間 mtime 修改時間 ctime 變化時間 eg find type f atime 7 print 最近7天訪問的檔案 ...

linux shell指令碼攻略 一

變數數 算 重定向陣列 別名終端資訊 日期相關 除錯指令碼 函式和引數 管道命令 字段分隔符和迭代器 迴圈算術比較 檔案系統相關測試 字串比較 日期內容 格式星期 a 例如 sat a 例如 saturday 月 b 例如nov b 例如 november 日 d 例如31 固定格式日期 d 例如 ...

Linux shell 指令碼學習攻略9

1 建立不可修改的檔案 chattr 能夠將檔案設定為不可修改。不過chattr能做的可不止這些。a 使用下列命令將乙個檔案設定為不可修改 b 這樣檔案file就變成為了不可修改狀態。來試試下面的命令 c 如果需要是檔案恢復可寫狀態,移除不可修改屬性即可 2 批量生成空白檔案 touch 命可以用來...