06_01_bash腳本編程之四 爵嗅、 整數(shù)測(cè)試及特殊變量慢睡、06_02_sed命令

測(cè)試方法:

[ ? ?expression ? ?]:命令測(cè)試法

[ [ expression ] ]:關(guān)鍵字測(cè)試法

test expression

bash中常用的條件測(cè)試有有一種:

? ? 整數(shù)測(cè)試:

? ? ? ? ? ? ?-gt:大于

? ? ? ? ? ? ?-le:小于等于

? ? ? ? ? ? ?-ne:不等于

? ? ? ? ? ? ?-eq:等于

? ? ? ? ? ? ?-ge:大于等于

? ? ? ? ? ? ?-lt:小于

eg

? ? ? INT1=63

? ? ? INT2=77

? ? ? [ ? $INT1 -eq $INT2 ? ]

? ? ? [ [ ?$INT1 ?-eq $INT2 ] ]

? ? ? test $INT1 -eq $INT2


? ? ?文件測(cè)試:

? ? ? ?-e FILE:測(cè)試文件是否存在

? ? ? ?-f ?FILE:測(cè)試文件是否為普通文件

? ? ? ?-d FILE:測(cè)試指定路徑是否為目錄

? ? ? ?-r ?FILE:測(cè)試指定文件對(duì)當(dāng)前用戶(hù)來(lái)講是否可讀

? ? ? ?-w FILE:測(cè)試指定文件對(duì)當(dāng)前用戶(hù)來(lái)講是否可寫(xiě)

? ? ? ?-x ?FILE:測(cè)試指定文件對(duì)當(dāng)前用戶(hù)來(lái)講是否可執(zhí)行


測(cè)試腳本是否有語(yǔ)法錯(cuò)誤:

bash -n 腳本

bash -x ?腳本:?jiǎn)尾綀?zhí)行


bash變量的類(lèi)型:

? ? ? ? 本地變量(局部變量):作用域當(dāng)前shell進(jìn)程

? ? ? ? 環(huán)境變量:當(dāng)前shell進(jìn)程和子進(jìn)程

? ? ? ? 位置變量:$1,$2,...

? ? ? ? ? ? ? ? ? ? ? ? ? 在腳本中如何引用作用對(duì)象

? ? ? ? ? ? ? ? ? ? ? ? ? eg ? ?./filetest.sh ? /etc/fstab ?/etc/inittab ....

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $1:/etc/fstab ?腳本中的第一個(gè)參數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? $2:/etc/inittab ?腳本中的第二個(gè)參數(shù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? …:腳本中的第n個(gè)參數(shù)

shift:位置參數(shù)可以用shift命令左移。比如shift 3表示原來(lái)的$4現(xiàn)在變成$1描融,原來(lái)的$5現(xiàn)在變成$2等等铝噩,原來(lái)的$1、$2窿克、$3丟棄骏庸,$0不移動(dòng)。不帶參數(shù)的shift命令相當(dāng)于shift 1年叮。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 特殊變量:

? ? ? ? ? ? ? ? ? ? ? $?:是返回腳本或者命令執(zhí)行之后的退出狀態(tài)具被,默認(rèn)返回值是0或者1,0代表退出成功谋右,無(wú)錯(cuò)誤硬猫,1代表退出失敗,某處有錯(cuò)誤改执。也可以自己設(shè)置退出值啸蜜,在腳本命令最后加上exit n,n表示任何一 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?個(gè)整數(shù)辈挂,比如exit 100衬横,那么退出狀態(tài)$?=100。

? ? ? ? ? ? ? ? ? ? ? $#:參數(shù)的個(gè)數(shù)

? ? ? ? ? ? ? ? ? ? ? $*:參數(shù)列表

? ? ? ? ? ? ? ? ? ? ? $@:參數(shù)列表

exit:退出腳本

exit #

如果腳本沒(méi)有明確定義退出狀態(tài)碼终蒂,那么蜂林,最后執(zhí)行的一條命令的退出狀態(tài)碼即為腳本的退出狀態(tài)碼

判斷文件是否存在

#!/bin/bash

FILE=/etc/inittab

if [ -e $FILE ]; then

? ?? ?? ?? ?? ? echo “ok”

else

? ?? ?? ?? ?? ? echo “nosuch file”

fi

測(cè)試腳本是否有語(yǔ)法錯(cuò)誤:bash–n +腳本名

寫(xiě)一個(gè)腳本

給定一個(gè)文件遥诉,如果是普通文件就顯示,如果是一個(gè)目錄亦顯示之噪叙,否則此為無(wú)法識(shí)別之文件

#!/bin/bash

FILE=/etc/rc.d/rc.sysinit

if [ ! –e $FILE ]; then

? ?? ?? ?? ?? ? echo “nosuch file”

fi

if [ -f $FILE ]; then

? ?? ?? ?? ?? ? echo “commonfile”

elif [-d $FILE ]; then

? ?? ?? ?? ?? ? echo “directory”

else

? ?? ?? ?? ?? ? echo”unknow”

fi

寫(xiě)一個(gè)腳本矮锈,能接受一個(gè)參數(shù)(文件路徑),判定此參數(shù)如果是一個(gè)存在的文件睁蕾,就顯示ok苞笨,否則顯示nosuch file

#!/bin/bash

echo $#(特殊變量,參數(shù)的個(gè)數(shù))

if [ -e $1 ]; then(位置變量)

? ?? ?? ?? ?? ? echo“ok”

else

? ?? ?? ?? ?? ? echo”nosuch file”

fi

寫(xiě)一個(gè)腳本子眶,給腳本傳遞2個(gè)參數(shù)(整數(shù))瀑凝,顯示2個(gè)數(shù)的和與積

#!/bin/bash

If [ $# -lt 2 ]; then

? ?? ?? ?? ?? ? Echo”usage:cacl.sh ARG1 ARG2”

? ?? ?? ?? ?? ? Exit

Fi

Echo “the sum is : $[ $1 + $2]”

Echo “the prod is: $[ $1 * $2 ]”

06_02_sed命令

Linux三大文本處理工具:grep, sed(流編輯器), awk?????


sed基本用法:

sed: Stream EDitor

?行編輯器?(全屏編輯器: vi),逐行讀取

sed:?模式空間

默認(rèn)不編輯原文件臭杰,僅對(duì)模式空間中的數(shù)據(jù)做處理粤咪;而后,處理結(jié)束后渴杆,將模式空間打印至屏幕寥枝;

sed [options] 'AddressCommand' file ...

?-n:?靜默模式,不再默認(rèn)顯示模式空間中的內(nèi)容

?-i:?直接修改原文件

?-e SCRIPT -e SCRIPT:可以同時(shí)執(zhí)行多個(gè)腳本

?-f /PATH/TO/SED_SCRIPT: 從文件中讀取命令磁奖,把命令寫(xiě)入文件脉顿,不需要單引號(hào)括起來(lái)

?sed -f /path/to/scripts?file

?-r:?表示使用擴(kuò)展正則表達(dá)式


Address:

1、StartLine,EndLine

?比如1,100

?$:最后一行

2点寥、/RegExp/

?/^root/

3、/pattern1/,/pattern2/

?第一次被pattern1匹配到的行開(kāi)始来吩,至第一次被pattern2匹配到的行結(jié)束敢辩,這中間的所有行

4、LineNumber

?指定的行

5弟疆、StartLine, +N

?從startLine開(kāi)始戚长,向后的N+1行;


Command:

?d:?刪除符合條件的行怠苔;

?p:?顯示符合條件的行同廉;

?a \string:?在指定的行后面追加新行,內(nèi)容為string

?\n:可以用于換行

?i \string:?在指定的行前面添加新行柑司,內(nèi)容為string

?r FILE:?將指定的文件的內(nèi)容添加至符合條件的行處

?w FILE:?將地址指定的范圍內(nèi)的行另存至指定的文件中;

?s/pattern/string/修飾符:?查找并替換迫肖,默認(rèn)只替換每行中第一次被模式匹配到的字符串

? ? ? ? ? ? ? ? ? ?匹配多個(gè)字符串,需要加修飾符:

? ? ? ? ? ? ? ? ? ? ? ?g:?全局替換

? ? ? ? ? ? ? ? ? ? ? ?i:?忽略字符大小寫(xiě)

? ? ?s///: 也可以使用其他字符做分隔符攒驰,只要一樣就行蟆湖,如s###, s@@@?



?后項(xiàng)引用:\(\), \1, \2

???????????????????&:?引用模式匹配整個(gè)串

?l..e->l..er: like-->liker

? ? ? ? ? ? ? ? ? ????love-->lover

sed 's#\(l..e\)#\1r#g'

? ? ?sed 's#l..e#&r#g'


l..e->L..e:?like-->Like

? ? ? ? ? ? ??? ? ? ? ? ?love-->Love

? ? ? ? sed 's#l\(..e\)#L\1#g'


sed練習(xí):

1、刪除/etc/grub.conf文件中行首的空白符玻粪;

sed -r 's@^[[:spapce:]]+@@g' /etc/grub.conf?

2隅津、替換/etc/inittab文件中"id:3:initdefault:"一行中的數(shù)字為5诬垂;

sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab

3、刪除/etc/inittab文件中的空白行伦仍;

sed '/^$/d' /etc/inittab

4结窘、刪除/etc/inittab文件中開(kāi)頭的#號(hào);

sed 's@^#@@g' /etc/inittab

5、刪除某文件中開(kāi)頭的#號(hào)及后面的空白字符充蓝,但要求#號(hào)后面必須有空白字符;

sed -r 's@^#[[:space:]]+@@g' /etc/inittab

6隧枫、刪除某文件中以空白字符后面跟#類(lèi)的行中的開(kāi)頭的空白字符及#

sed -r 's@^[[:space:]]+#@@g' /etc/inittab

7、取出一個(gè)文件路徑的目錄名稱(chēng);

echo "/etc/rc.d/" | sed -r 's@^(/.*/)[^/]+/?@\1@g'?????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棺克,一起剝皮案震驚了整個(gè)濱河市悠垛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娜谊,老刑警劉巖确买,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纱皆,居然都是意外死亡湾趾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)派草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搀缠,“玉大人,你說(shuō)我怎么就攤上這事近迁∫掌眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鉴竭,是天一觀的道長(zhǎng)歧譬。 經(jīng)常有香客問(wèn)我,道長(zhǎng)搏存,這世上最難降的妖魔是什么瑰步? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮璧眠,結(jié)果婚禮上缩焦,老公的妹妹穿的比我還像新娘。我一直安慰自己责静,他們只是感情好袁滥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泰演,像睡著了一般呻拌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睦焕,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天藐握,我揣著相機(jī)與錄音靴拱,去河邊找鬼。 笑死猾普,一個(gè)胖子當(dāng)著我的面吹牛袜炕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播初家,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼偎窘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了溜在?” 一聲冷哼從身側(cè)響起陌知,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掖肋,沒(méi)想到半個(gè)月后仆葡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡志笼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年沿盅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纫溃。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腰涧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出紊浩,到底是詐尸還是另有隱情窖铡,我是刑警寧澤,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布坊谁,位于F島的核電站万伤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呜袁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一简珠、第九天 我趴在偏房一處隱蔽的房頂上張望阶界。 院中可真熱鬧,春花似錦聋庵、人聲如沸膘融。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)氧映。三九已至,卻和暖如春脱货,著一層夾襖步出監(jiān)牢的瞬間岛都,已是汗流浹背律姨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臼疫,地道東北人择份。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像烫堤,于是被迫代替她去往敵國(guó)和親荣赶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容