日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux之shell脚本(2)

發布時間:2025/3/15 linux 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux之shell脚本(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linuxshell腳本(2)

printf命令:

printf是一個把從標準輸入的字符按照你所要求的格式輸出到標準輸出即屏幕的命令.?在很多時候,我們可能需要將自己的數據給他格式化輸出的。

1.格式化輸出。print ?format

2.命令格式:printf'打印格式'實際內容

3.打印格式:

1\a(警告聲音輸出)

2)\b(退格鍵)

3\f(清除屏幕,類似換紙)

4)\n(輸出新的一行)

5\r(幀處于行的開始,即enter鍵)

6\t(水平的table鍵)

7)\v(垂直的table鍵)

8\xNNxASCII碼十六進制表示;NN為倆位數數字;可轉換數字成為字符)

9)%nsn為數字;s代表string,即多少個字符)

10%nin為數字;i代表integer,即多少整數字符)

11%N.nfnN為數字;f代表floating浮點,小數字數即小數點)

案例:

1)以整數形式輸出23并換行,以字符串形式輸出hello并換行

2)2位整數形式輸出23并換行,以7位字符串形式輸出hello并換行

案例文本

?

考試分數的輸出:假設有一個文件test.txt記錄著考試分數,內容如下圖所示:

3下圖所示,printf命令的輸出結果并沒有對齊,%s代表一個不固定長度的字符串,而字符串與字符串中間就以?\t?這個?[tab] 分隔符來處理。既然每個字段的長度不固定會造成上述的困擾,那我將每個字段固定就好啦。

test.txt文件中的內容,分別以字符串、整數、小數點來顯示:

上面的格式共分為五個字段%10s 代表的是一個長度為?10 個字符的字符串字段,%5i 代表的是長度為?5 個字符的數字字段,至于那個?%8.2f 則代表長度為?8 個字符的具有小數點的字段,其中小數點有兩個字符寬度;全部的寬度僅有?8 個字符,整數部分占有?5 個字符,小數點本身?(.) 占一位,小數點后的位數則有兩位。?

二、awk命令:

awk也是一個數據處理工具!相較于?sed 常常作用于一整個行的處理,?awk 則比較傾向于一行當中分成數個字段來處理。

.awk語言的最基本功能是在文件或字符串中基于指定規則來分解抽取信息,也可以基于指定的規則來輸出數據。

有三種方式調用awk

1)命令行方式

awk ??[-F ?field-separator] ?'commands' ?input-files

其中,[-F域分隔符]是可選的,因為awk使用空格或tab鍵作為缺省的域分隔符,因此如果要瀏覽域間有空格的文本,不必指定這個選項,如果要瀏覽諸如passwd文件,此文件各域以冒號作為分隔符,則必須指明-F選項,如:awk -F: 'commands' input-file

:linux系統中用環境變量IFS存儲分隔符,但根據實際應用也可以改變IFS的值.

例如:查看默認分隔符。

注意:oldIFS=$IFS(把環境變量IFS存到oldIFS

IFS=","(定義分隔符為,

2)shel腳本方式

將所有的awk命令插入一個文件,并使awk程序可執行,然后awk命令解釋器作為腳本的首行,以便通過鍵入腳本名稱來調用。

相當于shell腳本首行的:#!/bin/sh可以換成:#!/bin/awk

3將所有的awk命令插入一個單獨文件,然后調用:

Awk?-f awk-script-file input-files

其中,-f選項加載awk-script-file中的awk腳本,input-files跟上面的是一樣的。

?

awk的模式和動作

任何awk語句都由模式和動作組成(awk_pattern { actions })。
在一個awk腳本中可能有許多語句。

模式部分決定動作語句何時觸發及觸發事件。處理即對數據進行的操作。如果省略模式部分,動作將時刻保持執行狀態。即省略時不對輸入記錄進行匹配比較就執行相應的actions。

?

模式可以是任何條件語句或正則表達式等。awk_pattern可以是以下幾種類型:

①正則表達式(/regexp/

布爾表達式用作awk_pattern,表達式成立時,觸發相應的actions執行。

1表達式中可以使用變量(如字段變量$1,$2)/regexp/

2布爾表達式中的操作符:

關系操作符:?< > <= >= == !=
匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,則返回真
value !~ /regexp/ 如果value不匹配/regexp/,則返回真

3&&() ||() 可以連接兩個/regexp/或者布爾表達式,構成混合表達式。!() 可以用于布爾表達式或者/regexp/之前。

例如:提取test.txtchinese大于75為優秀。

例如:提取passwd中匹配d開頭的顯示ok

例如:模式包括兩個特殊字段?BEGINEND。使用BEGIN語句設置計數和打印頭。BEGIN語句使用在任何文本瀏覽動作之前,之后文本瀏覽動作依據輸入文本開始執行。END語句用來在awk完成文本瀏覽動作后打印輸出文本總數和結尾狀態標志。

動作:

實際動作在大括號{?}內指明。動作大多數用來打印,但是還有些更長的代碼諸如i f和循環語句及循環退出結構。如果不指明采取動作,awk將打印出所有瀏覽出來的記錄。

awk執行時,其瀏覽域標記為$1$2...$n。這種方法稱為域標識。使用這些域標識將更容易對域進行進一步處理。

?

使用$1 , $3表示參照第1和第3域,注意這里用逗號做域分隔。如果希望打印一個有5個域的記錄的所有域,不必指明$1 , $2 , $3 , $4 , $5,可使用$0,意即所有域。為打印一個域或所有域,使用print命令。這是一個awk動作

awk的運行過程:

①?如果BEGIN 區塊存在,awk執行它指定的actions。

②??awk從輸入文件中讀取一行,稱為一條輸入記錄。(如果輸入文件省略,將從標準輸入讀取)

③??awk將讀入的記錄分割成字段,將第1個字段放入變量$1中,第2個字段放入$2,以此類推。$0表示整條記錄。

④??把當前輸入記錄依次與每一個awk_cmd中awk_pattern比較,看是否匹配,如果相匹配,就執行對應的actions。如果不匹配,就跳過對應的actions,直到比較完所有的awk_cmd。

⑤??當一條輸入記錄比較了所有的awk_cmd后,awk讀取輸入的下一行,繼續重復步驟,這個過程一直持續,直到awk讀取到文件尾。

⑥??awk讀完所有的輸入行后,如果存在END,就執行相應的actions。

awk入門實例:

1顯示/etc/passwd文件中用戶名和登錄shell

2顯示/etc/passwd文件中用戶名和登錄shell,中間以tab分隔

3:顯示/etc/passwd文件中用戶名和登錄shell,中間以逗號分隔

4:顯示/etc/passwd文件中UID大于500的所有用戶的用戶名和登錄shell

5顯示/etc/passwd文件中的UID大于500的用戶名和登錄shell,而賬戶與shell之間以逗號分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"

1.awk 后面接兩個單引號并加上大括號?{} 來設定想要對數據進行的處理動作

2.awk工作流程是這樣的:先執行BEGING,然后讀取文件,讀入有\n換行符分割的一條記錄,然后將記錄按指定的域分隔符劃分域,填充域,$0則表示所有域,$1表示第一個域,$n表示第n個域,隨后開始執行模式所對應的動作。接著開始讀入第二條記錄······直到所有的記錄都讀完,最后執行END操作。

六、函數及腳本的綜合應用

?

1shell函數:shell允許將一組命令集或語句形成一個可用塊,這些塊稱為shell函數。

?

函數由兩部分組成:函數標題、函數體。

?

標題是函數名。函數體是函數內的命令集合。

?

標題名應該唯一;如果不是,將會混淆結果,因為腳本在查看調用腳本前將首先搜索函數調用相應的shell

?

2定義函數的格式為:

函數名(){

命令1

...

}

如果愿意,可在函數名前加上關鍵字function,這取決于使用者。

function函數名()

{?

??命令1

??...

}

例如:

腳本案例:

案例一、刪除文件中的空行:

這個腳本(腳本名為del.lines)可以處理一個或多個文件。每個文件在用sed刪除空行之前要先核實是否存在。

sed的輸出被導入一個文件名中含有$ $的臨時文件,最后這個臨時文件又被移回到原來的文件中。

該腳本使用shift命令取得所有的文件名,用while循環逐個處理所有的文件,直至處理完

為止。可以使用del.lines --help獲得一個簡短的幫助

chmod ?+x ?del.lines,增加執行權限,

測試如下:

注:

1、basename命令能夠從路徑中分離出文件名。通常用于shell腳本中

2、shift語句用于遷移位置變量,將 $1~$9 依次向左傳遞

例如,若當前腳本程序獲得的位置變量如下:

$1=file1、$2=file2、$3=file3、$4=file4

則執行一次shift命令后,各位置變量為:

$1=file2、$2=file3、$3=file4

再次執行shift命令后,各位置變量為:

$1=file3、$2=file4

案例二、日志文件超過長度,備份,清除內容:

腳本內容

注:du 并不是顯示文件的實際大小,而是顯示文件所占用的 block 大小,默認linux系統分區的 block size 4k,也就是說即使文件只有1個字節,也會占用4k.
ls -l則是文件的實際大小。

轉載于:https://blog.51cto.com/duyuheng/1942539

總結

以上是生活随笔為你收集整理的Linux之shell脚本(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久久久久久久久久久久久av | 欧美亚洲在线观看 | 精品日本一区二区三区在线观看 | 欧美日韩一区二区三区69堂 | 国产一区久久久 | 国产精品v欧美精品v日韩精品 | 国产国语亲子伦亲子 | 欧美精品一区二区三区在线播放 | 福利所第一导航 | 成人免费无码大片a毛片 | 国产精品99999 | 九九九久久久 | 91精品毛片| 九九热精品视频在线播放 | 韩国一级淫片免费看 | 日韩久久久久久久久久 | 亚洲成人aaa | 中文字幕精品在线视频 | 1024手机在线看片 | 精精国产xxxx视频在线播放 | 91av欧美| 美女撒尿无遮挡网站 | 四虎影院在线视频 | 日韩第四页 | 国产做爰视频免费播放 | 最新亚洲精品 | 精品久久久久久久中文字幕 | 尹人成人 | 嫩草视频在线观看免费 | 无码精品a∨在线观看中文 福利片av | 特级丰满少妇一级aaaa爱毛片 | 少妇日b | 免费黄色小视频在线观看 | 日本人xxxⅹ18hd19hd | 99精品区| 日日干夜夜艹 | 亚洲国产精品区 | 麻豆免费在线观看 | 四虎影像 | 黄色av一级| 一区二区视频在线观看免费 | 黄色小毛片 | 桃色一区二区三区 | 66亚洲一卡2卡新区成片发布 | 香蕉久久一区二区三区 | 亚洲欧美一区二区在线观看 | 欧美天天视频 | 美女被草视频在线观看 | a级一级黄色片 | 国产后入又长又硬 | 国产xxx视频 | 久草中文在线视频 | 国产一国产二 | 97超碰在线播放 | 欧美女人一区二区 | 午夜整容室 | 91免费官网| 奇米影视在线观看 | 97超碰在线播放 | 欧美精品123 | 四虎精品一区二区 | 国产黄色视屏 | 成人试看120秒体验区 | 色吧婷婷| 国产精品美女久久久久av超清 | 亚洲好视频 | 国产鲁鲁视频在线观看免费 | 欧美成人精品一区二区男人小说 | julia一区二区 | 麻豆视频免费在线观看 | 免费黄av | 肉色超薄丝袜脚交一区二区图片 | 在线亚洲区 | 8x8ⅹ国产精品一区二区 | 国产精品电影一区二区三区 | 国产一级影院 | 在线天堂中文在线资源网 | 国产尻逼| 色婷婷激情av| 国产黄色电影 | 成人黄色免费视频 | 国产精彩视频 | 中文在线а√在线 | 国产欧美一区二区精品忘忧草 | 国产日韩欧美综合在线 | 伊人网五月天 | a级在线免费观看 | 黄色一级片. | 欧美激情一二三 | 在线播放毛片 | 黄色录像片子 | 99国产精品久久久久久久 | 日韩国产亚洲欧美 | 久久久国际精品 | 亚洲av综合色区无码另类小说 | 日韩欧美在线一区二区 | 网站在线观看你懂的 | 激情黄色小说视频 | 欧美国产日本 |