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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基本命令部分

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

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

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

f:一般檔案,普通文件

-exec<命令或腳本》{}\對查詢結果轉給其他命令操作

ls-1列出詳細信息

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

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

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

3、myfile.html內容如下:

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

刪除HTML標記,也就是要得到:

ThisiswhatImeant.

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

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

s/<Vb>//g將文件含有<\b>的字符轉換為空字符,'轉定義字符,將特殊符號意義去除。

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

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

tr-s[^']<filename(轉換來自標準輸入的字符)

tr轉換字符,例如:將大寫字符轉換成小寫字符。選項可以讓你指定所要刪除的字符,

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

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

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ù)字且放在行首

。匹配一個不在指定范圍內的字符

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

7、讓電腦10秒鐘后重啟

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

sleep10;shutdown-rnow

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

2>/dev/null

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

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

trap是一個shell內建命令,它用來在腳本中指定信號如何處理。比如,按Ctrl+C會使

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

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

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

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

Trap4111INT表示忽略SIGINT信號,按Ctrl+C不會退出腳本,輸出"helloint”

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

當您運行Ctrl+C等中斷時,會自動運行echo命令

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

10,強制結束指定進程號的進程

kill-9pid

(pid為指定的進程號)

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

chownrootfilename

chmod700filename

12.查出系統(tǒng)中所有用戶標識號大于99的用戶

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

13.統(tǒng)計系統(tǒng)中用戶標識號大于99的用戶數(shù)

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

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

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

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

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

Wc-1統(tǒng)計文件行數(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.將當前目錄下的所有文件打包成一個文件。

tarczvf名字.tar.gz$(ls)

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

關于tar命令:

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

-Z:是否同時具有gzip的屬性?亦即是否需要用gzip壓縮?

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

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

16.解釋命令:Inab

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

的鏈接。

ln-s源文件目標文件:為a生成一個軟連接b,軟連接,不占磁盤空間。

In源文件目標文件:為a生成一個硬連接b,hardlink占磁盤空間。

17.用命令方式將一個進程暫停

kill-STOPpid(pid為進程號)

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

查找當前目錄中所有的hello.c文件并列出他們的詳細信息

-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顯示行號

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

反向選擇

認$':以$結尾開頭,即表示空行

以為#號開頭

顯示express中的非空行和非#號開頭的句子

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

輸出含有兩個o的句子

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

匹配一行中頭一個字符跟最后一個字符相同的行

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

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

注意”執(zhí)行n時會首先輸出當前處理行

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

cat的-n是輸出行號

sed的-n取消默認輸出

p輸出

N追加?行

輸出奇數(shù)行

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

-n取消默認輸出

p輸出

N追加一行

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

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

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

=號:打印當前的行號

sed=express的輸出是:

1

“OpenSource*1isagoodmechanismtodevelopprograms.

2

appleismyfavoritefood.

3

Footballgameisnotusefeetonly.

4

thisdressdoesn1tfitme.

5

However,thisdressisabout$3183dollars.

N追加一行

s替換

\n是換行符

sAn/:把換行符換成冒號

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:刪除模式空間開頭到第一個\n(含)之間的內容,并且控制流跳到腳本的第一條語句

刪除重復行后輸出

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

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

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

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

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

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

-e表示允許多次修改

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

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

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

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

文件倒著輸出

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

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

s:替換

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

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

\n是換行符

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

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

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

所以輸出WeChinaUnix

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

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

sedGexpress

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

awk'{print$0express

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

sed7A$/d;G'express

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

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

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

!八$/表示不是空行

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

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時會首先輸出當前處理行,然后讀取下?行,并使用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.輸出行號,行號和正文間加冒號

sed=expressIsed*N;sAn/:/'

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

N:追加下一個輸入行到模式空間后面并在二者間嵌入一個“\n",改變當前行號碼。

二:打印當前行號

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

%d:1進制有符號整數(shù)

NR:行號

36.對文件中的所有非空行編號

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

N:追加下一個輸入行列模式空間后面并在二者間嵌入一個,改變當前行號碼.

■:打印當前行號

,匹配一個共換行符的字符

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

并在兩行之間插入\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)輸出,格式為:十進制布■符號整數(shù)>當前處理的行所包含的字符中

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

前處理行號了蜓行內容,否則,直接輸出當前處理的挖行內容.

37.計算行號(模擬“wc-1”)

sed-n'$='express

關于WC命令:

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

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

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

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

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

wc-wfilename:顯示一個文件的字數(shù)

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

-n,-quiet,—silent

安靜模式,取消默認輸出。

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

=:打印當前行號

相關解釋:

$=表示打印最后?行的行號,-n表示安靜模式,不會輸出其他行的相關內容

awk'END{printNR}'express

awk相關的知識點:

BEGIN和END

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

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

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

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

使用END來輸出最終結果。

所以awkEND{printNR},也就是在讀取到最后一行之后,才輸出對于的行號,也就是輸出

該文件的行數(shù)。

38.模擬dos2unix

實現(xiàn)dos2unix的關鍵就是把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和正則表達式r匹配的所有字符串替換。返回值是

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

相關解釋:

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

39.將所有good改為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:安靜模式,取消默認輸出。

g:表示行內全面替換,當前處理行進行全局替換。

-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個域匹配/is/正則表達式,第0個域保存的即是當前處理的整行數(shù)據(jù)。

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

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

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行的時候退出?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:獲得內存緩沖區(qū)(holdspace)的內容,并追加到當前模式空間文本的后面。

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

把holdspace(這時為空)中的內容追加到模式空間的后面,相當于增加一空白行。

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

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

關于tac命令:

把文件內容反過來顯示,文件內容的最后一行先顯示,第一行最后顯示。

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

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

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

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

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

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

1:表示文件第一行

第一行的時候

1!G:在處理第一行的時候不把緩沖內容添加到當前處理行的末尾(因為你處理第一行

的時候,緩沖還為空呢)

h:這個時候把第一行的內容(1)放到緩沖區(qū)

$!d:因為不是最后一行,所以刪除,不打印出來

第二行的時候

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

了(21)

h:這個時候把第二行的內容(21)放到緩沖區(qū)

$!d:因為不是最后?行,所以刪除,不打印出來

第三行的時候

1!G:因為是第三行,所以1!G成立,則把上一次(第二行)保存的緩沖區(qū)內容(21)放到當

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

h:這個時候把第三行的內容(321)放到緩沖區(qū)

$!d:因為不是最后一行,所以刪除,不打印出來

這樣直到處理到最后一行的時候:

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

該行變成了(n…321)

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

$!d:因為是最后一行,所以不刪除,打印出第六行內容nfn-l]-321

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

BEGIN和END

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

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

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

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

變量,使用END來輸出最終結果。

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

完所有的行之后,繼續(xù)質詢END中的內容: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方法相關命令參數(shù):

-e

直接在指令列模式上進行sed的動作編輯,允許多臺編輯。

:a

表示建立-一個標簽a

b

跳轉命令,這個命令是無條件跳轉

ba表示跳轉到標簽a處

q

退出Sed。

N

追加下一個輸入行到模板塊后面并在二者間嵌入一個“\n",改變當前行號碼。

D

刪除模板塊的第一行。

11

表示文件第十一行

相關解釋9:

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

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

空間的第一行,繼續(xù)跳到標簽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

相關解釋:

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

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

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

關于tail命令:

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

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

會使用標準輸入。Number變量

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

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

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

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

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

始讀取文件。

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

sed方法:

sed'$!N;$!D'express

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

!

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

N

追加下一個輸入行到模板塊后面并在二者間嵌入一個“\n",改變當前行號碼。

D

刪除模板塊的第?行。

相關解釋:

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

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

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

刪除命令,此時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

相關解釋:

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

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

用a[i]輸出。

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

sed'N;D'express

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

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

直到最后一行,打印輸出pattenspace中的內容,也就是最后一行的內容

48.顯示第9行

sed-n'9p'express

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

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

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

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

輸出。

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

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

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.編寫一個名為nf的程序,顯示當前目錄中的文件數(shù)。鍵入程序并測試。

IsIawk4{files++}END{printfiles}'

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

信息。鍵入程序并測試。

whoIsort-nrklIawk'{print$1}'

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

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

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

54.在終端上顯示

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

顯示的時候,第2個$*的值應該被替換,比如如果x=3,顯示:

?<echo$x?>displaysthevalueofx,whichis3

X=3

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

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

filename=/home/zsh/express

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

echofilename

如果是echoSfilename則輸出結果:AhomeAzshAexpress

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

-cl表示取出第一個字符

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

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

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

作用:一個命令的標準輸出插在一個命令行中任何位置

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

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

#!/bin/sh

echotheyare$*

exit0

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

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

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

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

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

#!/bin/sh

echo"$#"

exit0

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

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

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

echo"$1donotexist”

fi

-e當指定的文件或目錄存在時返回真

#!/bin/sh

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

echo"$1donotexist"

else

echo"$1isexisted"

fi

exit0

-e當指定的文件或目錄存在時返回真

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

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

renamememol.sv

應該將文件memol更名為memol.sv

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

mv$1$1$2

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

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

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

的字符串,即

unrenamememol.sv.sv

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

unrenametestltesttest

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

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

$2$表示匹配第二個域的內容直到結尾的

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

解決方法:

forloopin$(ls)

do

ifechoH$loopuIgrep-q'c'

then

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

fi

done

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

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

for變量名in取值列表

do

命令列表

done

相關解釋:

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

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

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

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

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

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

mansource可以查看所有的內部命令信息。

shell的內建命令exec將并不啟動新的shell,而是用要被執(zhí)行命令替換當前的shell進程,

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

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

不過,要注意一個例外,當exec命令來對文件描述符操作的時候,就不會替換shell,

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

shell的內建命令exec將并不啟動新的shell,而是用要被執(zhí)行命令替換當前的shell進程,

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

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

就自己退出了,因為這個shell進程已被替換為僅僅執(zhí)行1s命令的一個進程,執(zhí)行結束自然

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

用主腳本調用這個腳本,調用點處可以用bashash,(a.sh就是存放該命令的腳本),這樣會

為a.sh建立一個subshell去執(zhí)行,當執(zhí)行到exec后,該子腳本進程就被替換成了相應的exec

的命令。

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

解釋下面的shell腳本

64:

#!/bin/sh

rm-ffred

if[-ffred];then

else

echofilefreddoesnotexist

fi

exit0

51:

#Wbin/sh

rm?ffred強制刪除ired

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

else

echotilefreddoesnotexist

fi

exit0

65:

#!/bin/sh

echoThedateis$(date)

set$(date)

echoThemonthis$2

exit0

#!/bin?'sh

echoThedateis$(date)輸出時間

set$(date)設置時間

echoThemonthis$2輸出第二個參數(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默認是換行

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

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每行直至文件尾結束

do

#processeachword

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

do

#convertwordtolowercase;sothatwecancountThE,THE,the,THeetcall

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

#isit'a1article?

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

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

done

done<$file

#displaystats〃輸出

echo”aarticleoccured$atimes'*

echouthearticleoccured$thetimes"

echo"anarticleoccured$antimes'1

whilereadline

do

echoSline

done<A

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

68:

#!/bin/bash

#同步某個文件夾,使目的文件夾的內容和源文件夾的內容保持?致,如果源文件夾的某個

文件作了更新,就將其拷貝進目的文件夾,如果源文件夾的某個文件已經刪除,也將目的文

件夾中相應的文件刪除。

sync()

(

#檢查使用方法是否正確

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

then

echonusage:./syncsrcdstn

fi

#檢查源文件夾是否存在

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

then

echo"error:srcdon'texist'1

exit1

fi

#檢查目的文件夾是否存在,如果不在,復制整個文件夾

if[!-e$2]

then

echo"cp-a$1$2”

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

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

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

return0

fi

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

forLoopin$(ls$2)

do

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

then

echo"rm-fr$2/$Loop"

rm-frn$2/$Loopu//-f強制-r遞歸刪除目錄和內容

fi

done

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

forLoopin$(ls$1)

do

#如果某個源文件對應的目的文件不存在,拷貝進目的文件夾。

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

then

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

cp-a$l/$Loop$2/$Loop〃復制一份$l/$Loop到$2/$Loop

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

fi

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

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

then

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

示原文件被更新了。

//stat顯示文件的詳細信息

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

//cut-c:以字符為單位進行分割,9?12表示第9個字符到第12個字符

//-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

#如果是目錄,遞歸調用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前面的@符號的作用是禁止回顯,直接輸出

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

goodbye”

@echoc=$(c)//c是"helloworld",因為c是:二,所以他只會從他之前找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)時,它只會到這句語句之前去找A的值,因A沒

溫馨提示

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

評論

0/150

提交評論