shell高級(jí)編程經(jīng)典教程_第1頁(yè)
shell高級(jí)編程經(jīng)典教程_第2頁(yè)
shell高級(jí)編程經(jīng)典教程_第3頁(yè)
shell高級(jí)編程經(jīng)典教程_第4頁(yè)
shell高級(jí)編程經(jīng)典教程_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第第頁(yè)shell高級(jí)編程經(jīng)典教程學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

非正常退出時(shí)的文件復(fù)原:

1.非正常退出后再次登錄執(zhí)行vim/test時(shí),會(huì)涌現(xiàn)這樣的界面提示:

2.執(zhí)行vim-rtest后再次執(zhí)行vim/test時(shí),涌現(xiàn)下面的提示界面:

3.未刪除.test.swp文件時(shí),即使復(fù)原了文件仍舊提示,復(fù)原并刪除才算完成:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

環(huán)境變量:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

grep〔基本型〕參數(shù):^匹配行首$匹配行尾.匹配單字符

*在正那么表達(dá)式中表示匹配=0個(gè)前面涌現(xiàn)的字符,而在bash中*表示=0個(gè)任意字符

[]里面可以寫許多,但是值匹配一個(gè),假如都找到呢,就都輸出來(lái)\轉(zhuǎn)義符,如’\.$’表示以.結(jié)尾

grep–v‘12’/share/date在/share/date中找不含12的行,只要有12的行就不顯示。但是grep‘【^2】’/share/date表示非2的的都可以顯示,假如這一行的內(nèi)容只有23,那么3是符合條件的,仍舊顯示這一行。區(qū)分很微妙,操作一下就明白了……^$空行

^…$只有3個(gè)字符的行^.*$匹配行中任意字符

.*用的特別多的,匹配任意個(gè)任意種類的字符〔即=0個(gè)〕,比如找到am和bm之間有任意多個(gè)任意字符時(shí),用’am.*bm’,可以找到找到ambm,amhbm,amfsbm,……總之a(chǎn)m與bm之間有=0個(gè)字符就是了。另外am和bm之間有任意多個(gè)字符o時(shí),用’amo*bm’,〔不是amo.*bm哦〕,可以找到ambm,amobm,amoobm,amooobm……假如是在h和g之間有至少2個(gè)o呢,就是’hooo*g’,找到

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

hoog,hooog,foooog……有點(diǎn)小啰嗦~~~

-i不區(qū)分大小寫,如-i‘the’就可以找到不區(qū)分大小寫的theo\{a,b\}既然功能相像就一起吧,這個(gè)表示匹配的次數(shù),假如在h和g之間有2個(gè)o就是’ho\{2\}g’,假如至少2就是’ho\{2,\}g’,假如是2到5個(gè)呢,就是’ho\{2,5\}g’啦……

[IiNn]大寫或小寫i或n,但是[Ii][Nn]只能找到i和n,為什么,下列圖。

[^0-9a-zA-Z]非數(shù)字且非字母

grep‘12[0-3]’/share/date找含120或121或122或123,都存在呢,就都顯示出來(lái)唄~~~

grep‘^[^12]’/share/date查找開頭不是12的行g(shù)rep‘[Ss]tep’找Step或step

grep–E‘134|159’/share/test找134或159,用管道符號(hào)時(shí)需要加–E,由于grep是基本型的,假如是延伸型的egrep就不用加-E啦,所以只用grep‘134|159’/share/test會(huì)找不到。但是為什么用egrep‘134|159’/share/test找到了,卻沒(méi)有行號(hào)和顏色呢,由于提前已經(jīng)在~/.bashrc設(shè)置好了aliasgrep=‘grep-n--color=auto’,加入這條語(yǔ)句后執(zhí)行source~/.bashrc重啟終端生效,或者關(guān)掉終端再打開。

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

egrep〔延伸性〕

egrep是grep的延伸,它有更多的功能,主要表現(xiàn)在上面提到的管道符號(hào)上,另外還有一些……

假如想去掉以#開頭的說(shuō)明行和空白行,用基本型grep表示為grep–v‘^#’/share/test|grep–v‘^$’用延伸型的egrep表示為egrep-v‘^#|^$’/share/test這樣看區(qū)分很明顯吧?。?!

‘go?d’g和d之間有0個(gè)或1個(gè)o,即gd或god

‘go+d’g和d之間有=1個(gè)o,即god或good或goood……‘go*d’g和d之間有=0個(gè)o,即gd或god或good或goood……‘go.*d’go和d之間有=0個(gè)任意字符,即god或gohd或gostd……‘g(oo|la)d’找good或glad,留意grep中用〔〕,而grep用[]‘A(*yz)+W’找開頭是A結(jié)尾是W,中間有=1個(gè)字符串*yz,如*yz,*yz*yz……例如執(zhí)行echo‘A*yz*yz*yz*yzW’|egrep‘A(*yz)+W’

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Sed:查找工具,查找或替換一個(gè)文件中的指定行,是面對(duì)行的操作,但是用字符串替換指令卻可以徑直對(duì)行中的字符串替換,〔假如就愛了個(gè)指定字符串替換為空就刪掉了〕所以sed可以插入,刪除行,也可以插入,刪除字符串。但是不會(huì)對(duì)原文件修改,只是將結(jié)果輸出參數(shù):

a在指定行的后面插入一行i在指定行的前面插入一行

〔假如插入幾行呢,就在各行之間用換行符\n〕d刪除指定的一行或幾行

p在屏幕列出指定的一行或幾行,常與-n協(xié)作運(yùn)用

c面對(duì)行的操作,替代一行或幾行〔將幾行替代為一行或?qū)⒁恍刑娲鸀閹仔卸伎梢浴?/p>

sed‘s/this/that/g’替換字符串指令將this替換為that,是面對(duì)指定行中的指定字符串的操作。有了它sed變得更強(qiáng)大了,它將sed的行操作擴(kuò)展到行中的字符串,可以插入、替換或刪除字符串,和vim中指令行模式下的:$s/this/that/g類似,但是更好用。

-i徑直修改文檔內(nèi)容而不輸出,慎用。如:sed-i‘s/\.$/\!/g’可將每行末尾的.替換為!〔.和!都加了轉(zhuǎn)義符\〕。留意這個(gè)-i和上面的i有所不同。例子:

下面的4個(gè)小技巧是在文檔sed.t*t中操作的:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Sed‘2,$d’sed.t*t刪除第二行到最末一行Sed’$d’sed.t*t刪除最末一行

假如有一行內(nèi)容為aisb那么怎么來(lái)插入和刪除呢Sed‘s/is/isfrom/g’就插入了from了變成aisfrombSed‘s/is//g’就刪除is了,變成ab①nl/etc/passwd|sed‘2ahelllo\njim’

將hello和jim兩行插入到第二行的后面,留意helllo和jim之間加了換行符\n哦

②將a替換為i就是插入到第二行的前面

③nl/etc/passwd|sed‘2,5d’刪除2,3,4,5行

④nl/etc/passwd|sed-n‘5,7p’在屏幕輸出5,6,7行,與-

-n一起用

⑤nl/etc/passwd|sed‘2,30chelllo\njim’將2到30行換為

helllo

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

和jim兩行

⑥/sbin/ifconfigeth0|grep’inetaddr’可找到含inetaddr:的行。/sbin/ifconfigeth0|grep’inetaddr’|sed’s/^.*addr://g’|sed’s/Bcast.*$//g’先將addr:及前面的內(nèi)容換為空〔即刪除〕,再將Bcast后面的內(nèi)容換為空〔刪除〕,結(jié)果呢,這一行就只剩192.168.0.10了,這就是替換的強(qiáng)大之處,如下列圖〔假如將指定字符串替換為其他呢〕

⑦cat/etc/man.config|grep‘MAN’|sed‘s/^#.*//g’|sed’s/^$//g’用grep找到含MAN的行,再在其中將以#開頭的說(shuō)明行換為空行,再將空行刪除。(留意是換為空行,所以原來(lái)的說(shuō)明行雖然內(nèi)容沒(méi)有了,但是行還在,也就是涌現(xiàn)了很多空行,所以后面才刪除空行)其中以#開頭的說(shuō)明行除了用^#.*表示,也可以用#.*$表示。

上面的方法雖然能涉及更多的知識(shí)點(diǎn),卻很繁瑣,不如徑直將以#開頭的說(shuō)明行刪除,指令為:

cat/etc/man.config|grep‘MAN’|sed‘/^#.*/d’

d表示刪除,以#開頭的說(shuō)明行用/^#.*/表示,留意加兩個(gè)/哦

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

awk:

以行為單位,面對(duì)列的處理工具。NF:NowField每一行的列數(shù)〔字段數(shù)〕NR:NowRow目前awk處理的是第幾行FS:string分隔符,不設(shè)置那么默認(rèn)是空格規(guī)律符號(hào):====!=例子:

(1)last-n5|awk‘{print$1“\t”$3}’先列出前5行,再打印輸出第一和第三列,并用tab分隔

(2)cat/etc/passwd|awk‘BEGIN{FS=”:”}$310{print$1“\t”$3}’假如第三列值小于10就將第1和第3列輸出,加BEGIN使分隔符:在第一列就生效,否那么在第二列生效且從第二列開始輸出(3)last-n5|awk‘{print$1“\tlines:”NR“\tcolumes:”NF}’執(zhí)行結(jié)果為:

rootlines:1columes:10rootlines:2columes:10nowerlines:3columes:10……

(4)Catminyingtao.t*t|awk’NR==1

{printf”%10s%10s%10s%10s%10s\n”,$1,$2,$3,$4,”Total”}

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

NR=2{total=$2+$3+$4;printf“%10s%10d%10d%10d%10.2f\n”,$1,$2,$3,$4,total}’執(zhí)行結(jié)果為:

NamefirstsecondthirdTotalJim10203060.00Tom1236.00Jim52411.00原文件為:

NamefirstsecondthirdJim102030Tom123Jim524

格式:awk‘條件1{動(dòng)作1}條件2{動(dòng)作2}……’文件名留意:全部條件和動(dòng)作在單引號(hào)中,printf中的內(nèi)容用雙引號(hào)而不是單引號(hào),變量值不加雙引號(hào),多個(gè)動(dòng)作用分號(hào)隔開修改登錄shell

方法一:永久修改。在/etc/paswd中將smb用戶的shell由bash該為csh,然后切到smb用戶,用echo$version查看,發(fā)覺已經(jīng)改為tcsh,如下列圖:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

方法二:永久修改。徑直執(zhí)行chsh〔即changeshell〕,然后寫下想要的shell類型,再執(zhí)行chsh時(shí)可以看見已經(jīng)改了,下列圖:

下面的全部test文件都需要修改權(quán)限才能執(zhí)行:chmod+*文件名Test0:#!/bin/bash#test

echo-ethis3lines\n\n\nechook

echoenteryourname:\n#這一行的輸出前面沒(méi)有加參數(shù)-e,所以不能換行,換行指令\n被輸出readnameecho-eenteryourpasswd:\nreadpasswd

echoname:$name,passwd:$passwd

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Test1:#!/bin/bash#test1myvar=80

echothevalueofvaris:$myvarecho'thevalueofvaris:$myvar'

Test2:#!/bin/bash

#test2

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

forcharinabcdedoecho$chardone

Test3:#!/bin/bash#test3

forcharin{1..5}doecho$chardone

Test4:#!/bin/bash#test4

forcharin`ls

/home`

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

〔可以寫成$(ls/home)和用反單引號(hào)寫成的`l(xiāng)s/home`都是執(zhí)行l(wèi)s/home指令〕doecho$chardone

Test5:#!/bin/bash#test5i=0

while[$i-lt5]do

echo“vlueofiis:$i”

i=$(($i+1))(可寫為i=`ecpr$idone

+1`留意反向單引號(hào))

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Test6:#!/bin/bash#test5echo$1echo$2echo$3

(前兩行是說(shuō)明,只為增加可讀性,可以修改,數(shù)字只能是1到9)

Test7:#!/bin/bash#test7

readlist

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

forvarin$listdoecho$vardone

Test8:#!/bin/bash#test8ma*=0

echo“pleaseinputnumber:”readlistforvarin$list

do

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

if[var-gt$ma*]thenma*=$varfidone

echo“ma*numberis:$ma*”

Test9:#!/bin/bash#test9

echo”pleaseinputnumber:\n”

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

readactual

if[$actual-ge0-a$actual-lt80]then

echo“yourgradeisC!”

elif[$actual-ge80-a$actual-lt90]then

echo“yourgradeisB!”

elif[$actual-ge90-a$actual-le100]then

echo“yourgradeisA!”else

echo-e“yournumberiswrong!\npleasenumber:\n”fi

inputne*t

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Test10:#!/bin/bash#test10

echo-epleaseinputyourchoice:\nreadchoice

case$choicein

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

非正常退出時(shí)的文件復(fù)原:

1.非正常退出后再次登錄執(zhí)行vim/test時(shí),會(huì)涌現(xiàn)這樣的界面提示:

2.執(zhí)行vim-rtest后再次執(zhí)行vim/test時(shí),涌現(xiàn)下面的提示界面:

3.未刪除.test.swp文件時(shí),即使復(fù)原了文件仍舊提示,復(fù)原并刪除才算完成:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

環(huán)境變量:

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

grep〔基本型〕參數(shù):^匹配行首$匹配行尾.匹配單字符

*在正那么表達(dá)式中表示匹配=0個(gè)前面涌現(xiàn)的字符,而在bash中*表示=0個(gè)任意字符

[]里面可以寫許多,但是值匹配一個(gè),假如都找到呢,就都輸出來(lái)\轉(zhuǎn)義符,如’\.$’表示以.結(jié)尾

grep–v‘12’/share/date在/share/date中找不含12的行,只要有12的行就不顯示。但是grep‘【^2】’/share/date表示非2的的都可以顯示,假如這一行的內(nèi)容只有23,那么3是符合條件的,仍舊顯示這一行。區(qū)分很微妙,操作一下就明白了……^$空行

^…$只有3個(gè)字符的行^.*$匹配行中任意字符

.*用的特別多的,匹配任意個(gè)任意種類的字符〔即=0個(gè)〕,比如找到am和bm之間有任意多個(gè)任意字符時(shí),用’am.*bm’,可以找到找到ambm,amhbm,amfsbm,……總之a(chǎn)m與bm之間有=0個(gè)字符就是了。另外am和bm之間有任意多個(gè)字符o時(shí),用’amo*bm’,〔不是amo.*bm哦〕,可以找到ambm,amobm,amoobm,amooobm……假如是在h和g之間有至少2個(gè)o呢,就是’hooo*g’,找到

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

hoog,hooog,foooog……有點(diǎn)小啰嗦~~~

-i不區(qū)分大小寫,如-i‘the’就可以找到不區(qū)分大小寫的theo\{a,b\}既然功能相像就一起吧,這個(gè)表示匹配的次數(shù),假如在h和g之間有2個(gè)o就是’ho\{2\}g’,假如至少2就是’ho\{2,\}g’,假如是2到5個(gè)呢,就是’ho\{2,5\}g’啦……

[IiNn]大寫或小寫i或n,但是[Ii][Nn]只能找到i和n,為什么,下列圖。

[^0-9a-zA-Z]非數(shù)字且非字母

grep‘12[0-3]’/share/date找含120或121或122或123,都存在呢,就都顯示出來(lái)唄~~~

grep‘^[^12]’/share/date查找開頭不是12的行g(shù)rep‘[Ss]tep’找Step或step

grep–E‘134|159’/share/test找134或159,用管道符號(hào)時(shí)需要加–E,由于grep是基本型的,假如是延伸型的egrep就不用加-E啦,所以只用grep‘134|159’/share/test會(huì)找不到。但是為什么用egrep‘134|159’/share/test找到了,卻沒(méi)有行號(hào)和顏色呢,由于提前已經(jīng)在~/.bashrc設(shè)置好了aliasgrep=‘grep-n--color=auto’,加入這條語(yǔ)句后執(zhí)行source~/.bashrc重啟終端生效,或者關(guān)掉終端再打開。

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

egrep〔延伸性〕

egrep是grep的延伸,它有更多的功能,主要表現(xiàn)在上面提到的管道符號(hào)上,另外還有一些……

假如想去掉以#開頭的說(shuō)明行和空白行,用基本型grep表示為grep–v‘^#’/share/test|grep–v‘^$’用延伸型的egrep表示為egrep-v‘^#|^$’/share/test這樣看區(qū)分很明顯吧!?。?/p>

‘go?d’g和d之間有0個(gè)或1個(gè)o,即gd或god

‘go+d’g和d之間有=1個(gè)o,即god或good或goood……‘go*d’g和d之間有=0個(gè)o,即gd或god或good或goood……‘go.*d’go和d之間有=0個(gè)任意字符,即god或gohd或gostd……‘g(oo|la)d’找good或glad,留意grep中用〔〕,而grep用[]‘A(*yz)+W’找開頭是A結(jié)尾是W,中間有=1個(gè)字符串*yz,如*yz,*yz*yz……例如執(zhí)行echo‘A*yz*yz*yz*yzW’|egrep‘A(*yz)+W’

學(xué)習(xí)sehll高級(jí)編程的絕好文檔,由淺入深,內(nèi)容具體,而且有大量經(jīng)典例題

Sed:查找工具,查找或替換一個(gè)文件中的指定行,是面對(duì)行的操作,但是用字符串替

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論