惠州學(xué)院Linux期末考試試卷題集答案_第1頁
惠州學(xué)院Linux期末考試試卷題集答案_第2頁
惠州學(xué)院Linux期末考試試卷題集答案_第3頁
惠州學(xué)院Linux期末考試試卷題集答案_第4頁
惠州學(xué)院Linux期末考試試卷題集答案_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基本命令部分

1、查找系統(tǒng)中所有文件長度為0的普通文件,并列出它們的完整路徑:

$find/-typef-size0-execIs-I{}\;

/表示系統(tǒng)所有文件如果空白表示當(dāng)前目錄

f:一般檔案,普通文件

-exec<命令或腳本》{}\對(duì)查詢結(jié)果轉(zhuǎn)給其他命令操作

ls-1列出詳細(xì)信息

2、查找/zsh目錄中更改時(shí)間在7日以前的普通文件,并在刪除之前詢問它們;

$findzsh-typef-mtime+7-okrm{}\;

解釋:-mtimen查找系統(tǒng)最后n*24小時(shí)被改變文件數(shù)據(jù)的文件。

3、myfile.html內(nèi)容如下:

<b>This</b>iswhat<b>I</b>meant.

刪除HTML標(biāo)記,也就是要得到:

ThisiswhatImeant.

catmyfile.htmllsed's/<b>//g;s/<Vb>//g'

解析:s/<b>//g將文件含有<b>的字符轉(zhuǎn)換為空字串,

s/<Vb>//g將文件含有<\b>的字符轉(zhuǎn)換為空字符,'轉(zhuǎn)定義字符,將特殊符號(hào)意義去除。

g表示全局化處理,沒加g的話只會(huì)替換一行里的第?個(gè)<b>然后就替換下-?行了

4、使用tr命令將指定文件的空行刪除

tr-s[^']<filename(轉(zhuǎn)換來自標(biāo)準(zhǔn)輸入的字符)

tr轉(zhuǎn)換字符,例如:將大寫字符轉(zhuǎn)換成小寫字符。選項(xiàng)可以讓你指定所要?jiǎng)h除的字符,

以及將一串重復(fù)出現(xiàn)的字符濃縮成一個(gè)。

-s刪除所有重復(fù)出現(xiàn)字符序列,只保留第一個(gè);即將重復(fù)出現(xiàn)字符串壓縮為一個(gè)字符串。

5、在txt目錄下搜索所有包含有‘the'單詞的.c文件,列出文件名

grep-lr"the"*.c

-1打印匹配模板的文件清單

-r遞歸地搜索目錄。在缺省情況下,按照到目錄的鏈接。

rootghzz-virtual-machine:/home/hzz#grep-r“the"*.cpp

abc.cpp:the;

there;

abode.cpp:the

rootghzz-virtual-machine:/home/hzz#grep-lr“the"*.cpp

6、使用grep將express文件里以數(shù)字開頭的行刪除掠

grep,A[A0-9]*express

A[0-9]代表查找的字符是數(shù)字且放在行首

。匹配一個(gè)不在指定范圍內(nèi)的字符

A[A0-9]代表以不以數(shù)字開頭的行

7、讓電腦10秒鐘后重啟

shutdown-r+10(這是10分鐘)

sleep10;shutdown-rnow

8、在shell執(zhí)行命令時(shí),屏蔽掉錯(cuò)誤信息。

2>/dev/null

2表示錯(cuò)誤的信息,/dev/null垃圾箱,表示把錯(cuò)誤的信息直接輸出到垃圾箱,即刪除

9、解釋命令:trap'echohelloint'INT。

trap是一個(gè)shell內(nèi)建命令,它用來在腳本中指定信號(hào)如何處理。比如,按Ctrl+C會(huì)使

腳本終止執(zhí)行,實(shí)際匕系統(tǒng)發(fā)送了SIGINT信號(hào)給腳本進(jìn)程,SIGINT信號(hào)的默認(rèn)處理方式

就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令來指定一下SIGINT

的處理方式了。trap命令不僅僅處理Linux信號(hào),還能對(duì)腳本退出(EXIT)、調(diào)試(DEBUG)、

錯(cuò)誤(ERR)、返回(RETURN)等情況指定處理方式。

Trap4111INT表示忽略SIGINT信號(hào),按Ctrl+C不會(huì)退出腳本,輸出"helloint”

通常我們需要忽略的信號(hào)有四個(gè),即:HUP,INT,QUIT,TSTP,也就是信號(hào)1,2,3,24

當(dāng)您運(yùn)行Ctrl+C等中斷時(shí),會(huì)自動(dòng)運(yùn)行echo命令

INT:中斷信號(hào),通常因按下Ctrl+C組合鍵而引發(fā)

10,強(qiáng)制結(jié)束指定進(jìn)程號(hào)的進(jìn)程

kill-9pid

(pid為指定的進(jìn)程號(hào))

11,將某個(gè)文件的屬性更改為只有root可讀寫執(zhí)行。

chownrootfilename

chmod700filename

12.查出系統(tǒng)中所有用戶標(biāo)識(shí)號(hào)大于99的用戶

cat/etc/passwdIawk-F'{if($3>99)print$1}'

13.統(tǒng)計(jì)系統(tǒng)中用戶標(biāo)識(shí)號(hào)大于99的用戶數(shù)

cut-d:-f1,3/etc/passwdIgrep10-9]\{3,\}'Iwc-1

cut命令有5個(gè)參數(shù),其中-c,-b,-f分別表示"character","byte"以及"加Id"截取方式。

當(dāng)采用field模式截取時(shí),需要用“-d”參數(shù)指定一個(gè)分隔符,分割符只能為單個(gè)字符。

cut-d:-f1,3/etc/passwd在/etc/passwd中以“:”為分隔符,取出第1和第3的域

grep10-9]\{3,\},0-9任何一個(gè)數(shù)字重復(fù)三遍

Wc-1統(tǒng)計(jì)文件行數(shù)

(cut-d:-f3/etc/passwdIgrep*[0-9]\{3,\!*Iwc-1也行)

14.按文件大小的降序列出目錄中的所有文件

Is-11sort-nrk5

Is-I|sort-nrk5或Is-1|sort-grk5

-g表示按大小排列

-r表示倒序

-k5表示按第五域排序

-n依照數(shù)值的大小排序。

-nrk5即是按照數(shù)字方式倒序排序,根據(jù)文件屬性的第5列印是文件大小排序

15.將當(dāng)前目錄下的所有文件打包成一個(gè)文件。

tarczvf名字.tar.gz$(ls)

也可以tarczvf名字.tar.gz.(最后面的小數(shù)點(diǎn).表示當(dāng)前目錄)

關(guān)于tar命令:

-c:建立一個(gè)壓縮文件的參數(shù)指令(create的意思);

-Z:是否同時(shí)具有g(shù)zip的屬性?亦即是否需要用gzip壓縮?

-V:壓縮的過程中顯示文件!這個(gè)常用,但不建議用在背景執(zhí)行過程!

-f:使用檔名,請(qǐng)留意,在f之后要立即接檔名喔!不要再加參數(shù)!

16.解釋命令:Inab

In是linux中又一個(gè)非常重要命令,它的功能是為某-一個(gè)文件在另外-個(gè)位置建立一個(gè)同不

的鏈接。

ln-s源文件目標(biāo)文件:為a生成一個(gè)軟連接b,軟連接,不占磁盤空間。

In源文件目標(biāo)文件:為a生成一個(gè)硬連接b,hardlink占磁盤空間。

17.用命令方式將一個(gè)進(jìn)程暫停

kill-STOPpid(pid為進(jìn)程號(hào))

18.解釋命令:find-namehello.c-execIs-1{}\;

查找當(dāng)前目錄中所有的hello.c文件并列出他們的詳細(xì)信息

-rw-r--r--1rootroot72013-06-0501:95./the.c

-rw-r--r--1rootroot72013-06-0501:07.八xt八he.c

(the.c為例)

19.解釋命令:grep-n<A[Aa-zA-ZJ,express

輸出express文件中不以字母開頭的行,-n顯示行號(hào)

20.解釋命令:grep-v'八$'expressIgrep-v'八#'

反向選擇

認(rèn)$':以$結(jié)尾開頭,即表示空行

以為#號(hào)開頭

顯示express中的非空行和非#號(hào)開頭的句子

21.解釋命令:grep-n'o\{2\}‘express

輸出含有兩個(gè)o的句子

22.解釋命令:grep-n<A\(.\).*\1$,express

匹配一行中頭一個(gè)字符跟最后一個(gè)字符相同的行

23.解釋命令:cat-nexpressIsed2;n'

讀一行,刪一行,讀一行,顯示出來是空的;

注意”執(zhí)行n時(shí)會(huì)首先輸出當(dāng)前處理行

24.解釋命令:cat-nexpressIsed-n'p;N'

cat的-n是輸出行號(hào)

sed的-n取消默認(rèn)輸出

p輸出

N追加?行

輸出奇數(shù)行

25.解釋命令:cat-nexpressIsed-n'N;p'

-n取消默認(rèn)輸出

p輸出

N追加一行

偶數(shù)行就全部輸出

奇數(shù)行就最后一行不輸出

26.解釋命令:sed=expressIsed'N;sAn/:/'

=號(hào):打印當(dāng)前的行號(hào)

sed=express的輸出是:

1

“OpenSource*1isagoodmechanismtodevelopprograms.

2

appleismyfavoritefood.

3

Footballgameisnotusefeetonly.

4

thisdressdoesn1tfitme.

5

However,thisdressisabout$3183dollars.

N追加一行

s替換

\n是換行符

sAn/:把換行符換成冒號(hào)

1:"OpenSource"isagoodmechanismtodevelopprograms.

2:appleismyfavoritefood.

3:Footballgameisnotusefeetonly.

4:thisdressdoesn'tfitme.

5:However,thisdressisabout$3183dollars.

27.解釋命令:sed'$!N;/A\(.*\)\n\l$/!P;D'chongfu

P:打印模板塊的第一行

D:刪除模式空間開頭到第一個(gè)\n(含)之間的內(nèi)容,并且控制流跳到腳本的第一條語句

刪除重復(fù)行后輸出

解釋:$!N:如果不是結(jié)尾行,則追加下一行到模板區(qū),在兩者間加Kn。

/A\(.*\)\n\l$/!P:如果本行跟模板空間中的內(nèi)容相同。

注意:執(zhí)行D命令之后,模板塊內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新執(zhí)行

sedscript,也就是直接再次執(zhí)行N命令,讀入下一行,然后刪除第一行。一直這樣循環(huán),

直到最后一行,打印輸出模板塊中的內(nèi)容,也就是最后一行的內(nèi)容

28.解釋命令:sed-e'1!G;h;$!d'express

-e表示允許多次修改

!:表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。(非)

G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。

h:拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。(覆蓋)

d:從模板塊位置刪除行。(刪除整個(gè)模板快)

文件倒著輸出

29.解釋命令:echo"WeLoveChinaUnix"lsed-e'H;sA(..\).*Al/;x;s/.*\(.\{9\}\)$Al/;x;G;sAn//'

H:追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。

s:替換

x表示互換模板塊中的文本和緩沖區(qū)中的文本。

G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。

\n是換行符

sA(..\).*Al/;前兩個(gè)字符

s/.*\(.\{9\}\)$Al/;后九個(gè)字符

sAn//;換行符替換成空格

所以輸出WeChinaUnix

二:分別使用sed和awk實(shí)現(xiàn)下面的功能(使用express文件)

30.在每一一行后面增加?一空行

sedGexpress

G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。(此時(shí)緩沖區(qū)是空白行)

awk'{print$0express

31.設(shè)置文本中每一行后面有且只有一空行。

sed7A$/d;G'express

/A$/d;表示遇到空行就刪除

G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。(此時(shí)緩沖區(qū)是空白行)

awk'!/A$/{printf("%s\n\n",$O)}'express

!八$/表示不是空行

printf("%s\n\n",$O)輸出正行數(shù)據(jù)并兩個(gè)換行符,即一個(gè)空行

32.在每行后面增加2行空行

sed7A$/d;G;G'express

awk'!/A$/(printf("%s\n\n\n",$O)}'express

33.刪除所有偶數(shù)行

sed'n;d'express

sed'n;d'執(zhí)行n時(shí)會(huì)首先輸出當(dāng)前處理行,然后讀取下?行,并使用d命令刪除。

awk'{tf(NR%2!=0)print$0}'express

34.在匹配The的行前插入空行

sed'/The/{x;p;xj,express

awk'if(/The/)printf(t7n%s/n,\$0);elseprint$0'express

35.輸出行號(hào),行號(hào)和正文間加冒號(hào)

sed=expressIsed*N;sAn/:/'

sed相關(guān)命令參數(shù):

N:追加下一個(gè)輸入行到模式空間后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。

二:打印當(dāng)前行號(hào)

awk'{printf("%d:%s\n”,NR,$0)}‘express

%d:1進(jìn)制有符號(hào)整數(shù)

NR:行號(hào)

36.對(duì)文件中的所有非空行編號(hào)

sed'/./='express|sedV./NisAn/:71

N:追加下一個(gè)輸入行列模式空間后面并在二者間嵌入一個(gè),改變當(dāng)前行號(hào)碼.

■:打印當(dāng)前行號(hào)

,匹配一個(gè)共換行符的字符

沙一,表示第一個(gè)字符是非換行字符的輸出行號(hào),sedV7N;sAn/T中N讀取下一行(行的內(nèi)容)

并在兩行之間插入\n,然后再使用“re/string把小替換成“:”

awk'{if(/./)print£("%d:%s\n",NR,$O);elseprintSO}'express

NR:表示awk開始執(zhí)行超序后所讀取的數(shù)據(jù)行數(shù)

printt("%d:%s'.n",NR,SO)輸出,格式為:十進(jìn)制布■符號(hào)整數(shù)>當(dāng)前處理的行所包含的字符中

整個(gè)語句表示:如果不是空行,則調(diào)用printf函數(shù)以“數(shù)字t字符申+換行”的形式輸出當(dāng)

前處理行號(hào)了蜓行內(nèi)容,否則,直接輸出當(dāng)前處理的挖行內(nèi)容.

37.計(jì)算行號(hào)(模擬“wc-1”)

sed-n'$='express

關(guān)于WC命令:

wc就是wordcount(數(shù)字?jǐn)?shù))的縮寫,通常利用Linux的wc命令和其他命令結(jié)合來計(jì)算行

和其他信息。在Linux下用wc進(jìn)行計(jì)數(shù)。返回文件的行數(shù)、字?jǐn)?shù)、字節(jié)數(shù)等。

wc-mfilename:顯示一個(gè)文件的字符數(shù)

wc-1filename:顯示一,個(gè)文件的行數(shù)

wc-Lfilename:顯示一個(gè)文件中的最長行的長度

wc-wfilename:顯示一個(gè)文件的字?jǐn)?shù)

sed相關(guān)的命令參數(shù):

-n,-quiet,—silent

安靜模式,取消默認(rèn)輸出。

$:錨定行的結(jié)束如:/sed$/匹配所有以sed結(jié)尾的行。

=:打印當(dāng)前行號(hào)

相關(guān)解釋:

$=表示打印最后?行的行號(hào),-n表示安靜模式,不會(huì)輸出其他行的相關(guān)內(nèi)容

awk'END{printNR}'express

awk相關(guān)的知識(shí)點(diǎn):

BEGIN和END

在awk中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中,提供BEGIN和

END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在BEGIN

之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后列出的操作將在

掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來顯示變量和預(yù)置(初始化)變量,

使用END來輸出最終結(jié)果。

所以awkEND{printNR},也就是在讀取到最后一行之后,才輸出對(duì)于的行號(hào),也就是輸出

該文件的行數(shù)。

38.模擬dos2unix

實(shí)現(xiàn)dos2unix的關(guān)鍵就是把dos中多余的\r去掉。

sed'sAr//g'expressdos>expressdosl

模擬unix2dos:

sed*s/$Ar/'expressdos>expressdos1

sed's/$AxOd/'expressdos>expressdos1

awk'gsub(Ar/,""){print$0}'express>express?

gsub(r,s,t):在字符串t中用字符串s和正則表達(dá)式r匹配的所有字符串替換。返回值是

替換的個(gè)數(shù)。如果沒有給出t,默認(rèn)是$0

相關(guān)解釋:

使用gsub把上替換成然后再輸出當(dāng)前處理的整行字符串

39.將所有g(shù)ood改為bad并打印且只打印該行

sed-n*s/good/bad/gp'express

awk'gsub("good","bad"){print$0)'express

40.將包含is的行的good改為bad并打印且只打印該行

sed-n7is/{/good/{s/good/bad/g;p}}'express

-n:安靜模式,取消默認(rèn)輸出。

g:表示行內(nèi)全面替換,當(dāng)前處理行進(jìn)行全局替換。

-n使用安靜模式,/is/匹配包含is的行,/good/匹配包含is的行中包含good的行,s/good/bad/g,

把改行所有的good都替換成bad,然后使用p輸出該行。

awk'{if($0~/is/&&$0~/good/){gsubCgood'/'bad");print$0}}'express

$0~/is/表示使用第0個(gè)域匹配/is/正則表達(dá)式,第0個(gè)域保存的即是當(dāng)前處理的整行數(shù)據(jù)。

($0-/is/&&$0~/good/)就是如果當(dāng)前處理的整行同時(shí)包含is和good的話就執(zhí)行if里面的語

句。if里面的語句使用gsub把匹配的good替換成bad,然后輸出當(dāng)前行。

41.將不包含is的行的good改為bad并打印且只打印該行

sed-n7is/!{/good/{s/good/bad/g;p}}'express

awk'{if($0!~/is/&&$0~/good/){gsub(/good/,"bad");print$0}}'express

42.顯示文件中的前10行(模擬“head”)

sed10qexpress

q表示退出sed,lOq表示處理到第10行的時(shí)候退出?sed?

awk'{if(NR<11)print$0}'express

NR:表示awk開始執(zhí)行程序后所讀取的數(shù)據(jù)行數(shù)

43.在每5行后增加一空白行

sed'n;n;n;n;G'express

n:讀取下一個(gè)輸入行,用下一個(gè)命令處理新的行而不是用第個(gè)命令。

G:獲得內(nèi)存緩沖區(qū)(holdspace)的內(nèi)容,并追加到當(dāng)前模式空間文本的后面。

n;n;n;n;G的執(zhí)行4個(gè)n命令讀取下一行,每次讀取之前都先輸出當(dāng)前的處理行。然后

把holdspace(這時(shí)為空)中的內(nèi)容追加到模式空間的后面,相當(dāng)于增加一空白行。

awk'{if(NR%5!=0)print$0;elseprintf("%s\n\n",$O)}'express

44.倒置所有行,第一行成為最后一行,依次類推(模擬“tac”)

關(guān)于tac命令:

把文件內(nèi)容反過來顯示,文件內(nèi)容的最后一行先顯示,第一行最后顯示。

sed'l!G;h;$!d'express

G:獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面。

h:拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。

d:從模板塊(Patternspace)位置刪除行。

!:表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。

$:錨定行的結(jié)束如:/sed$/匹配所有以sed結(jié)尾的行。這里表示文件最后一行。

1:表示文件第一行

第一行的時(shí)候

1!G:在處理第一行的時(shí)候不把緩沖內(nèi)容添加到當(dāng)前處理行的末尾(因?yàn)槟闾幚淼谝恍?/p>

的時(shí)候,緩沖還為空呢)

h:這個(gè)時(shí)候把第一行的內(nèi)容(1)放到緩沖區(qū)

$!d:因?yàn)椴皇亲詈笠恍?,所以刪除,不打印出來

第二行的時(shí)候

1!G:此時(shí)1!G成立,把上一次保存的緩沖區(qū)內(nèi)容(1)放到當(dāng)前行(2)的末尾,第二行變成

了(21)

h:這個(gè)時(shí)候把第二行的內(nèi)容(21)放到緩沖區(qū)

$!d:因?yàn)椴皇亲詈?行,所以刪除,不打印出來

第三行的時(shí)候

1!G:因?yàn)槭堑谌校?!G成立,則把上一次(第二行)保存的緩沖區(qū)內(nèi)容(21)放到當(dāng)

前行(3)的末尾,第二行變成了(321)

h:這個(gè)時(shí)候把第三行的內(nèi)容(321)放到緩沖區(qū)

$!d:因?yàn)椴皇亲詈笠恍?,所以刪除,不打印出來

這樣直到處理到最后一行的時(shí)候:

l!G:此時(shí)1!G成立,把上(n-1)一次保存的緩沖區(qū)內(nèi)容Qn-ir-321)放到當(dāng)前行(n)的末尾,

該行變成了(n…321)

h:這個(gè)時(shí)候把第n行的內(nèi)容(n…321)放到緩沖區(qū)

$!d:因?yàn)槭亲詈笠恍?所以不刪除,打印出第六行內(nèi)容nfn-l]-321

awk'{A[i++]=$O[END{for(j=i-1;j>=O;j")printA[j]|'express

BEGIN和END

在awk中兩個(gè)特別的表達(dá)式,BEGIN和END,這兩者都可用于pattern中,提供BEGIN

和END的作用是給程序賦予初始狀態(tài)和在程序結(jié)束之后執(zhí)行一些掃尾的工作。任何在

BEGIN之后列出的操作(在{}內(nèi))將在awk開始掃描輸入之前執(zhí)行,而END之后列出的操

作將在掃描完全部的輸入之后執(zhí)行。因此,通常使用BEGIN來顯示變量和預(yù)置(初始化)

變量,使用END來輸出最終結(jié)果。

首先輸入每行字都執(zhí)行A[i++J=$O,即是把所有行的內(nèi)容保存到A[i]數(shù)組中。直到處理

完所有的行之后,繼續(xù)質(zhì)詢END中的內(nèi)容:for(j=i-l;j>=0;j-)printAfj],這里是吧A[i]中的

元素倒序輸出,即是倒置所有的行。

45.顯示文件中的最后10行(模擬“tail”)

sed方法:

sed-e:a-e'$q;N;11,$D;ba'express

sed方法相關(guān)命令參數(shù):

-e

直接在指令列模式上進(jìn)行sed的動(dòng)作編輯,允許多臺(tái)編輯。

:a

表示建立-一個(gè)標(biāo)簽a

b

跳轉(zhuǎn)命令,這個(gè)命令是無條件跳轉(zhuǎn)

ba表示跳轉(zhuǎn)到標(biāo)簽a處

q

退出Sed。

N

追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。

D

刪除模板塊的第一行。

11

表示文件第十一行

相關(guān)解釋9:

首先創(chuàng)建一個(gè)a標(biāo)簽,然后不斷執(zhí)行這段代碼:$q;N;ll,$D;ba,如果是最后一行則退出

sed,否則繼續(xù)循環(huán),N讀取下一行,讀取模式空間的第11行,如果是最后行則刪除模式

空間的第一行,繼續(xù)跳到標(biāo)簽a處執(zhí)行。

awk方法:

awk'{a[i++1=$0)END{if(i>10)for(j=i-10;j<i;j++)printa[j];elsefor(j=O;j<i;j++)printa[j]}'

express

相關(guān)解釋:

使用{a[i++]=$0}把每行字符串賦給a[i]數(shù)組,然后判斷數(shù)組大小是不是大于10if(i>10),

如果是則輸入最后10個(gè)元素,否則直接輸出所有的元素。

46.顯示文件中的最后2行(模擬“tail-2”命令)

關(guān)于tail命令:

tail[-r][-nNumber][File]

tail命令從指定點(diǎn)開始將File參數(shù)指定的文件寫到標(biāo)準(zhǔn)輸出。如果沒有指定文件,則

會(huì)使用標(biāo)準(zhǔn)輸入。Number變量

指定將多少單元寫入標(biāo)準(zhǔn)輸出。Number變量的值可以是正的或負(fù)的整數(shù)。如果值的

前面有+(加號(hào)),從文件開頭

指定的單元數(shù)開始將文件寫到標(biāo)準(zhǔn)輸出。如果值的前面有-(減號(hào)),則從文件末尾指

定的單元數(shù)開始將文件寫到

標(biāo)準(zhǔn)輸出。如果值前面沒有+(加號(hào))或-(減號(hào)),那么從文件末尾指定的單元號(hào)開

始讀取文件。

tail-2即是輸出最后兩行。

sed方法:

sed'$!N;$!D'express

sed相關(guān)命令參數(shù):

!

表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用。

N

追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)“\n",改變當(dāng)前行號(hào)碼。

D

刪除模板塊的第?行。

相關(guān)解釋:

$!表示如果不是最后一行則執(zhí)行N命令追加下一行,$!D表示如果不是最后行則刪除

第一行。注意:執(zhí)行D命令之后,patternspace內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新

執(zhí)行sedscript?也就是直接再次執(zhí)行$!N命令,讀入下一行。知道最后一行忖就不執(zhí)行D

刪除命令,此時(shí)pattenspace中有最后兩行數(shù)據(jù)。

awk方法:

awk'{a[i++]=$O}END{if(i>2)for(j=i-2;j<i;j++)printa[j];elsefor(j=O;j<i;j++)printa[j])'

express

相關(guān)解釋:

a[i++]=$0命令保存所有行到a[i]數(shù)組中。處理完所有語句之后執(zhí)行END里的內(nèi)容。然

后分兩種情況輸出:超過兩條語句的使用a[i]數(shù)組輸出最后兩行,沒有超過兩句的,直接使

用a[i]輸出。

47.顯示文件中的最后?行(模擬“tail-1”)

sed'N;D'express

注意:執(zhí)行D命令之后,patternspace內(nèi)不添加下一筆數(shù)據(jù),而將剩下的數(shù)據(jù)重新執(zhí)行

sedscript,也就是直接再次執(zhí)行N命令,讀入下一行,然后刪除第?行。一直這樣循環(huán),

直到最后一行,打印輸出pattenspace中的內(nèi)容,也就是最后一行的內(nèi)容

48.顯示第9行

sed-n'9p'express

awk'{if(NR==9)print$0}'express

49.顯示包含50個(gè)或以上一字符的行

sed-n7A.\{50,\}$/p'express

'/A\{50,\}$/p1表示匹配以非換行字符開始的50個(gè)以上的字符的行,然后使用p命令

輸出。

awk'{if(length($0)>=50)print$0}'express

50.顯示部分文本——從包含apple的行開始到最后一行結(jié)束

sed-n7apple/,$p'express

awkBEGIN{p=l}{if($0?/apple/IIp==0){p=0;print$0}}'express

51.顯示通篇文檔,除了從包含apple的行到包含google的行

sed7apple/ygoogle/drexpress

/apple/,/google/d表示匹配從包含apple的行到包含google的行,然后使用d全部刪除。

awk'BEGIN{p=l}{if($0!-/apple/&&p==l)print$0;elsep=O;if($0?/google/)p=l;}'

express

首先在BEGIN中給p賦初值1,然后依次處理每一條語句。如果沒有匹配到apple并且

p==l,則輸出改行;否則p=0,直到匹配到google為止,才讓p=L繼續(xù)輸出

三shell部分

52.編寫一個(gè)名為nf的程序,顯示當(dāng)前目錄中的文件數(shù)。鍵入程序并測(cè)試。

IsIawk4{files++}END{printfiles}'

53.編寫一個(gè)名為whos的程序,顯示排好序的已登錄用戶清單。只顯示用戶名,不要有其他

信息。鍵入程序并測(cè)試。

whoIsort-nrklIawk'{print$1}'

-n按照數(shù)字方式排序。

-r顛倒指定排序的順序。

-k作用是根據(jù)某個(gè)列來排序,默認(rèn)是第1列(從1開始)。

54.在終端上顯示

?<echo$x?>displaysthevalueofx,whichis$x

顯示的時(shí)候,第2個(gè)$*的值應(yīng)該被替換,比如如果x=3,顯示:

?<echo$x?>displaysthevalueofx,whichis3

X=3

echo"?<echo\$x?>displaysthevalueofx,whichis$x"

55.依次執(zhí)行下面三條命令,分析結(jié)果。

filename=/home/zsh/express

filename=$(echoSfilenameItr"$(echoSfilenameIcut-cl),,“八")

echofilename

如果是echoSfilename則輸出結(jié)果:AhomeAzshAexpress

但是這里filename只是一個(gè)字符串,所以echofilename就只是輸出filename這個(gè)字符

-cl表示取出第一個(gè)字符

$(echoSfilenameIcut-cl)表示取文件名的第一個(gè)字符的值,即

tr"$(echoSfilenameIcut-cl)"表示把每一個(gè)都替換成"”

shell編程里的$(…)結(jié)構(gòu)是什么作用,舉例說明。

作用:一個(gè)命令的標(biāo)準(zhǔn)輸出插在一個(gè)命令行中任何位置

例如:上例中$(echo$filename|cut-cl)

56.編寫一腳本,打印出所有的參數(shù)。

#!/bin/sh

echotheyare$*

exit0

$?竹遞給shellscript的參數(shù)

#!/bin/sh是指此腳本使用Zbin/sh來解釋執(zhí)行,#!是特殊的表示符,其后面跟的是解釋

此腳本的shell的路徑)如果沒有聲明,則腳本將在默認(rèn)的shell中執(zhí)行,默認(rèn)shell是由用

戶所在的系統(tǒng)定義為執(zhí)行shell腳本的shell.

57.編寫一個(gè)腳本,統(tǒng)計(jì)參數(shù)的總數(shù)。

#!/bin/sh

echo"$#"

exit0

$#表示代遞給shellscript的參數(shù)個(gè)數(shù)

58.編寫一個(gè)腳本,判斷指定的文件是否存在

if[!-e"$1"];then

echo"$1donotexist”

fi

-e當(dāng)指定的文件或目錄存在時(shí)返回真

#!/bin/sh

if[!-e"$1"];then

echo"$1donotexist"

else

echo"$1isexisted"

fi

exit0

-e當(dāng)指定的文件或目錄存在時(shí)返回真

60.編寫一個(gè)名為rename的程序,給第1個(gè)參數(shù)所給定的文件更名,在原名后添加第2個(gè)

參數(shù)包含的一串字符。即

renamememol.sv

應(yīng)該將文件memol更名為memol.sv

創(chuàng)建一個(gè)rename的文件,在里面編寫:

mv$1$1$2

mv$l$1$2,中$1對(duì)應(yīng)第一個(gè)參數(shù),$2對(duì)應(yīng)第二個(gè)參數(shù),即是把$1對(duì)應(yīng)的文件名更改

為由$1$2組成的文件名

61.編寫一個(gè)名為unrename的程序,從第1個(gè)參數(shù)指定的文件名的后部去掉第2個(gè)參數(shù)包含

的字符串,即

unrenamememol.sv.sv

應(yīng)該把文件memoLsv更名為memol。要保證從尾部去掉字符串,如

unrenametestltesttest

應(yīng)該將tesltest更名為testl(提示:用sed和命令替換)

mv$1$(echo$1Isedns/$2$//")

$2$表示匹配第二個(gè)域的內(nèi)容直到結(jié)尾的

62.編寫一個(gè)shell腳本,使用循環(huán)語句將當(dāng)前目錄下的.c文件更名為.cpp.

解決方法:

forloopin$(ls)

do

ifechoH$loopuIgrep-q'c'

then

mv$loop$(echoSloopIsed"sA.c$A.cpp/")

fi

done

關(guān)于shell腳本的for循環(huán)語句格式:

for循環(huán)語句格式如下:

for變量名in取值列表

do

命令列表

done

相關(guān)解釋:

forloopin$(ls)表示變量loop從Is命令得到的列表中取值。

ifecho"Sloop"Igrep-q'c'中-q或--quiet或-silent表示不顯示任何信息。整句表示判斷

是否找到以.c結(jié)尾的文件,找到則執(zhí)行then里面的語句。

mvSloop$(echo$looplsed"s/\.c$/\.cpp/")表示把.c換成.cpp

63.source命令和exec命令有啥區(qū)別?舉例說明。

exec和source都屬于bash內(nèi)部命令(builtinscommands),在bash下輸入manexec或

mansource可以查看所有的內(nèi)部命令信息。

shell的內(nèi)建命令exec將并不啟動(dòng)新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,

并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行

source命令或者不會(huì)為腳本新建shell,而只是將腳本包含的命令在當(dāng)前shell執(zhí)行。

不過,要注意一個(gè)例外,當(dāng)exec命令來對(duì)文件描述符操作的時(shí)候,就不會(huì)替換shell,

而且操作完成后,還會(huì)繼續(xù)執(zhí)行接下來的命令。

shell的內(nèi)建命令exec將并不啟動(dòng)新的shell,而是用要被執(zhí)行命令替換當(dāng)前的shell進(jìn)程,

并且將老進(jìn)程的環(huán)境清理掉,而且exec命令后的其它命令將不再執(zhí)行。

因此,如果你在一個(gè)shell里面,執(zhí)行execIs那么,當(dāng)列出了當(dāng)前目錄后,這個(gè)shell

就自己退出了,因?yàn)檫@個(gè)shell進(jìn)程已被替換為僅僅執(zhí)行1s命令的一個(gè)進(jìn)程,執(zhí)行結(jié)束自然

也就退出了。為了避免這個(gè)影響我們的使用,一般將exec命令放到一個(gè)shell腳本里面,

用主腳本調(diào)用這個(gè)腳本,調(diào)用點(diǎn)處可以用bashash,(a.sh就是存放該命令的腳本),這樣會(huì)

為a.sh建立一個(gè)subshell去執(zhí)行,當(dāng)執(zhí)行到exec后,該子腳本進(jìn)程就被替換成了相應(yīng)的exec

的命令。

source命令或者”.”,不會(huì)為腳本新建shell,而只是將腳本包含的命令在當(dāng)前shell執(zhí)行。

解釋下面的shell腳本

64:

#!/bin/sh

rm-ffred

if[-ffred];then

else

echofilefreddoesnotexist

fi

exit0

51:

#Wbin/sh

rm?ffred強(qiáng)制刪除ired

if[-ffred];then咒斷tred是否是普逋文件

else

echotilefreddoesnotexist

fi

exit0

65:

#!/bin/sh

echoThedateis$(date)

set$(date)

echoThemonthis$2

exit0

#!/bin?'sh

echoThedateis$(date)輸出時(shí)間

set$(date)設(shè)置時(shí)間

echoThemonthis$2輸出第二個(gè)參數(shù)

exit0

66:

#!/bin/sh

while[,,$ln!='M,];do

echo"$1”

shift

done

exit0

#l/bin7sh

while[ff$r!-];do

echon$r輸出所有的多數(shù)

shin把位苴參數(shù)左移

done

exit0

67:

#!/bin/bash

#WriteashellscriptthatcountsEnglishlanguagearticles(a,an,the)

#inagiventextfile.

#

#

#ThisisafreeshellscriptunderGNUGPLversion2.0orabove

#Copyright(C)2005nixCraftproject.

#Feedback/comment/suggestions:/fb/

#

#ThisscriptispartofnixCraftshellscriptcollection(NSSC)

#Visit/formoreinformation.

#

echo-n"Enterafilename:"〃參數(shù)-n的作用是不換行,echo默認(rèn)是換行

readfile〃從健盤輸入.read命令接收標(biāo)準(zhǔn)輸入(鍵盤)的輸入,或其他文件描述符的輸入

a=0

the=0

an=0

#makesurefileexist

if[!-f$file]//-ffilename如果行l(wèi)ename為常規(guī)文件,則為真

then

echon$filenotafile!*'

exit1〃exit(l)表示異常退出

fi

#putwhilelooptoreada$file

whilereadline〃讀取文件$file每行直至文件尾結(jié)束

do

#processeachword

forwin$line〃變量w$line取值空間

do

#convertwordtolowercase;sothatwecancountThE,THE,the,THeetcall

lword=',$(echo$wItr1A-Z]*,[a-z],)H〃把每個(gè)字符都轉(zhuǎn)成小寫

#isit'a1article?

[[$lword=uan]]&&((a++))II[[$lword="the"]]&&((由e++))11[[$lword="an"]]

&&((an++))〃統(tǒng)計(jì)athean的數(shù)量,分別保存在a,the和an中

done

done<$file

#displaystats〃輸出

echo”aarticleoccured$atimes'*

echouthearticleoccured$thetimes"

echo"anarticleoccured$antimes'1

whilereadline

do

echoSline

done<A

(碼在最后相當(dāng)于給整個(gè)whiledo語句加了一個(gè)約束條件.讀取文件A里每行至文件尾結(jié)束

68:

#!/bin/bash

#同步某個(gè)文件夾,使目的文件夾的內(nèi)容和源文件夾的內(nèi)容保持?致,如果源文件夾的某個(gè)

文件作了更新,就將其拷貝進(jìn)目的文件夾,如果源文件夾的某個(gè)文件已經(jīng)刪除,也將目的文

件夾中相應(yīng)的文件刪除。

sync()

(

#檢查使用方法是否正確

if[$#-ne2J〃$#表示提供到shell腳本或者函數(shù)的參數(shù)總數(shù),-ne表示不等于

then

echonusage:./syncsrcdstn

fi

#檢查源文件夾是否存在

ifl!-e$lJ//-e$l第一個(gè)參數(shù)所指的文件夾存在!非

then

echo"error:srcdon'texist'1

exit1

fi

#檢查目的文件夾是否存在,如果不在,復(fù)制整個(gè)文件夾

if[!-e$2]

then

echo"cp-a$1$2”

cp-a$1$2//-a相當(dāng)于-pdr,-p保留源文件或目錄的屬性,-d若來源文件

〃為連結(jié)文件的屬性(linkfile),則復(fù)制連結(jié)文件屬性而非檔案本身,-r遞歸處理,將指定目

〃錄下的文件與子目錄一并處理

return0

fi

#刪掉目的文件夾多出的文件。

forLoopin$(ls$2)

do

if[!-en$l/$Loop"]//如果不存在這個(gè)文件$l/$Loop

then

echo"rm-fr$2/$Loop"

rm-frn$2/$Loopu//-f強(qiáng)制-r遞歸刪除目錄和內(nèi)容

fi

done

#循環(huán)處理當(dāng)前源文件目錄下的每個(gè)文件。

forLoopin$(ls$1)

do

#如果某個(gè)源文件對(duì)應(yīng)的目的文件不存在,拷貝進(jìn)目的文件夾。

if[!-e$2/$Loop]〃如果不存在這個(gè)文件$2/$Loop

then

echo"cploop$l/$Loop$2/$Loop"

cp-a$l/$Loop$2/$Loop〃復(fù)制一份$l/$Loop到$2/$Loop

Continue〃進(jìn)行下次循環(huán),即繼續(xù)找有沒有這種文件

fi

#如果不是目錄,是文件,檢查是否更新,如果有,將其拷貝進(jìn)口的文件。

if[-f$l/$LoopJ//-ffilename如果filename為常規(guī)文件,則為真

then

#timel表示源文件的修改時(shí)間,time2表示目的文件的修改時(shí)間,如果time1大于time2,表

示原文件被更新了。

//stat顯示文件的詳細(xì)信息

//grep-i不區(qū)分大小寫

//cut-c:以字符為單位進(jìn)行分割,9?12表示第9個(gè)字符到第12個(gè)字符

//-gt:大于

timel=$(stat$l/$LoopIgrep-i'modify'Icut

9-12,14,15,17,18,20,21,23,24,26,27)

time2=$(stat$2/$LoopIgrep-i'modify'Icut

9-12,14,15,17,18,20,21,23,24,26,27)

if[$timel-gt$time2]//-gt:大于

then

echoucp$l/$Loop$2/$Loop"

cp$l/$Loop$2/$Loop

fi

continue

fi

#如果是目錄,遞歸調(diào)用sync函數(shù)處理。

if[-d$l/$Loop]//-d如果為目錄,則為真

then

sync$l/$Loop$2/$Loop//sync()函數(shù)

fi

done

)

sync$l$2//sync()函數(shù)

exit0

四:make命令部分:

69解釋下面的makefile文件

a="helloworld1'

b=$(a)

c:=$(a)

a="goodbye"

print:

@echob=$(b)〃echo前面的@符號(hào)的作用是禁止回顯,直接輸出

//“goodbye",而不是輸出“echob=goodbye

goodbye”

@echoc=$(c)//c是"helloworld",因?yàn)閏是:二,所以他只會(huì)從他之前找a的值

1.0example

2.B:?$(A)

3.A=later

4.all:

5.@echo$(B)

執(zhí)行make命令,我們發(fā)現(xiàn)什么都沒輸出,我們將第3ff的:=換成?

1.0example

2.B?$(A)

3.A=later

4.all:

5.?echo$(B)

執(zhí)行make,輸出later。

分析:B:=$(A)時(shí),它只會(huì)到這句語句之前去找A的值,因A沒

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論