【面試題】Shell編程必備

老男孩教育oldboyedu.com.png

運維學(xué)習(xí)交流群-點我加群:598972270

第1章 Shell

1.1.1 選擇

1.1.1.1 改變bash的提示符實際上就是改變變量()

$HOME $PWD $PS1 $PS2

1.1.1.2 在shell腳本中,用來讀取文件內(nèi)各個域的內(nèi)容并將其賦值給shell變量的命令是______

fold join tr read

1.1.1.3 從后臺啟動進(jìn)程,應(yīng)在命令的結(jié)尾加上符號()

A:&
B:@
C:#
D:$

1.1.1.4 不是shell具有的功能和特點是()

A:管道
B:輸入輸出重定向
C:執(zhí)行后臺進(jìn)程
D:處理程序命令

1.1.1.5 退出交互模式的shell,應(yīng)鍵入()

A:<Esc> B:^q C:exit D:quit

1.1.1.6 shell不僅僅是用戶命令解釋器,同時一種強大的編程語言,linux缺省的shell是

bash
ruby
PHP
perl

1.1.1.7 以下函數(shù)中,和其他函數(shù)不屬于一類的是

Read pread write pwrite fseek lseek

1.1.1.8 下列變量名中有效的shell變量名是:______

-2-time _2$3 trust_no_1 2004file

1.1.1.9 下列對shell變量FRUTT操作,正確的是______

為變量賦值:$FRUTT=apple 顯示變量的值:fruit=apple

顯示變量的值:echo $FRUTT 判斷變量是否有值:[ -f --$FRUTT || ]

1.1.1.10在shell編程中關(guān)于$2的描述正確的是

程序后攜帶了兩個位數(shù)參數(shù) 宏替換

程序后面攜帶的第二個位置參數(shù) 攜帶位置參數(shù)的個數(shù)

1.1.1.11在shell環(huán)境下想把‘gyyx’值賦給變量company,下面哪個是正確的:

company = gyyx
$company=gyyx
company='gyyx'
company=gyyx

1.1.1.12下面sed刪除行,下面哪個腳本是錯誤的是

sed -e '/man/d' filename
sed -e '1,3d' filename
sed -e '1,/man/d' filename
sed -e '/man/3d' filename

1.1.1.13下面表述錯誤的是

0表示程序的執(zhí)行名字n 表示程序的第n個參數(shù)值

$* 表示程序的所有參數(shù)個數(shù) $$表示程序的PID

1.1.1.14下列代碼樣例中,哪個存在錯誤:

for filename in $(ls) do cat $filename done

for((i=0;i<10;i++)) do echo $i done

x=1 sum=0 while [ $x -le 10 ] do let sum=sum+$x let x=x+1 done echo\ $sum

for $i in 1 2 3 4 5 do echo $i done

1.1.1.15在shell腳本中,用來讀取文件內(nèi)各個域的內(nèi)容并將其賦值給shell變量的命令是:

Fold join tr read

1.1.1.16shell中如何跳出當(dāng)前循環(huán)繼續(xù)之后的循環(huán)

break continue exit kill

1.1.1.17shell腳本中的注釋符

# // /**/ " "

1.1.1.18采用bash執(zhí)行shell腳本時加上哪個參數(shù)可以跟蹤執(zhí)行腳本過程

-x -u -f -p

1.1.1.19以下命令執(zhí)行后,結(jié)果為()

Var1=abcdedf

Var2=abcded

Echo “$var1” |grep -q “$var2” && echo “yes” ||echo “no”

無結(jié)果 語法錯誤 yes no

1.1.1.20在shell比較運算符中,數(shù)值測試“等于則為真”的是()

-ne -ge -eq -le

1.1.2 填空

1.1.2.1 在shell編程中,如果要訪問變量值,可以變量前加一個——符號

1.1.2.2 請說出以下符號在bash shell中的意義

$0 $n $# $? $* $$ ${#aa}

1.1.2.3 編寫shell程序之前必須賦予該腳本_____

1.1.2.4 Linux系統(tǒng)shell腳本第一行需寫______代表什么意義_____

1.1.2.5 編寫shell腳本時注釋符是_________

1.1.2.6 shell命令“sed -i s/\r/ /g test.txt”實現(xiàn)的是_______

1.1.3 簡答

1.1.3.1 在shell中,$0,$n,$#,$*,$@,$?分別是什么含義?

1.1.3.2 統(tǒng)計/var/log下文件的個數(shù)。

1.1.3.3 如何將F1文件的運行結(jié)果輸出到F2.txt里?

1.1.3.4 寫一個腳本實現(xiàn)判斷192.168.1.0/24 網(wǎng)絡(luò)里,當(dāng)前在線的ip有哪些,能拼通則認(rèn)為在哪

1.1.3.5 根據(jù)以下信息:

IP_Address MAC_Address Interface Static

10.66.10.250 80:71:7A:33:CA:A7 br on

10.66.10.249 5C:50:15:7F:3B:F5 br on

將以上文件名稱test.txt文件中IP_Address,MAC_Address, Interface三項下的內(nèi)容取出來,值以“:”分割,并呈格式顯示出來。注:

10.66.10.250:80:71:7A:33:CA:A7:br

10.66.10.249:5C:50:15:7F:3B:F5:br

1.1.3.6 在shell中變量的賦值有四種方法,其中采用name=jfedu.net的方法稱:

直接復(fù)制 使用read命令 使用命令行傳參 使用命令輸出

1.1.3.7 編寫一個腳本,5分鐘檢查一次日志,發(fā)現(xiàn)有暴力SSH破解現(xiàn)象的,提取此類IP地址,并去重,并按降序排序。

要求:同一個IP暴力破解超過10次,自動屏蔽IP地址,指定辦公室IP地址(192.168.100.100)為可信任IP地址,不受屏蔽規(guī)則限制,以下為日志格式:

日志樣式:

May 4 03:43:07 tz-monitor sshd{14003}: Failed password for root from 124.232.135.84 port 25251 ssh2

Myy 4 03:43:07 tz-monitor sshd{14082}: invalid user postgres from 124.232.135.84

1.1.3.8 檢查OSPF route-ID配置,配置如下,請用shell編寫代碼,條件如下:a.檢查ospf的route-id值,route-id值必須與interface LoopBack0的IP地址值相同,如果兩個值不相等打印出ospf的route-id的值,并且ospf的route-id值必須以139開頭,如139.xx.xx.xx,否則也打印出route-id的值

ofpf 100

route-id 139.11.0.1

area 0.0.0.0

network 139.11.0.1 0.0.0.0

network 140.11.0.0 0.0.0.3

network 140.11.0.8 0.0.0.3

network 140.11.0.16 0.0.0.3

network 140.11.0.24 0.0.0.3

network 140.11.0.32 0.0.0.3

interface LoopBack0

ip address 139.11.0.1 255.255.255.255

1.1.3.9 檢查IP地址合規(guī),請用shell編寫代碼,列出不以199或200開頭的IP地址,如199.x.x.x 或200.x.x.x

Interface Physical Protocol IP Adderss

Eth1/0/1 up up 199.11.250.1

Eth1/0/2 up up 200.11.250.5

Loop0 up up(s) 199.11.250.1

Vlan1 *down down unassigned

Vlan500 down down 139.100.1.157

Vlan900 up up 140.11.250.41

1.1.3.10處理以下文件內(nèi)容,將域名提取并進(jìn)行計數(shù)排序,如處理:

http://www.baidu.com/index.html

http://www.baidu.com/1.html

http://post.baidu.com/index.html

http://mp3.baidu.com/index.html

http://www.baidu.com/3.html

http://post.baidu.com/2.html

得到如下結(jié)果:

域名的出現(xiàn)次數(shù) 域名

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

可以使用bash/per/php任意一種

1.1.3.11在單臺服務(wù)器Linux操作系統(tǒng)環(huán)境下,寫一行命令,將所有該機器的所有以“.log.bak“為后綴的文件,打包壓縮并上傳到ftp上,F(xiàn)TP地址為123.234.25.130的/home/bak文件夾

1.1.3.12Linux腳本:現(xiàn)在要刪除本機中若干文件,/root/file.list中記錄了這些文件的絕對路徑,請用腳本實現(xiàn)。/root/file.list內(nèi)容范例:/tmp/1.file

1.1.3.13說出shell的種類,已經(jīng)常用的shell

1.1.3.14下面代碼會輸出什么:

def f(x,1=[]);

for i in range(x);

1.append(i*i)

print 1

f(2)

f(3,[3,2,1])

f(3)

1.1.3.15根據(jù)以下nginx日志信息格式,統(tǒng)計全天PV、UV及UV的前十、PV前十頁面;分別列出狀態(tài)碼499、500、502按次數(shù)統(tǒng)計的前三位

36.110.86.173 - - [30/Otc2017:09:38:30 +0800] “POST /index.php?r=tuiguang%2Fdelete HTTP/1.1” 200 385 0.036 “http://backend.lepu.cn/index.php?r=tuiguang%2Findex&id=535634“ “Mozilla/5.0 (windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Fecko) Chrome/55.0.2883.87 Safari/537.36” “0.68”

全天PV: 全天UV: PV前十:

UV前十: 499前三: 500前三: 502前三:

1.1.3.16創(chuàng)建一個函數(shù),能接受兩個參數(shù);

(1) 第一個參數(shù)為URL,即可下載的文件;第二個參數(shù)為目錄,即下載后保存位置;

(2) 如果用戶給的目錄不存在,則提示用戶是否創(chuàng)建;如果創(chuàng)建就繼續(xù)執(zhí)行,否則函數(shù)返回一個51的錯誤值給調(diào)用腳本

(3) 如果給的目錄存在,則下載文件;下載命令執(zhí)行結(jié)束后測試文件下載成功,如果成功,則返回0給調(diào)用腳本,否則,返回52給調(diào)用腳本;

1.1.3.17有一個長度為n序列,需要移除掉里面的重復(fù)元素,但是對于每種元素保留最后出現(xiàn)的那個。輸入描述:輸入包括兩行

第一行為序列長度n(1≤ n≤ 50)

第二行為n個數(shù)scqucencel,以空格分隔

輸出描述

輸出消除重復(fù)元素之后的序列,以空格分隔,行末無空格

輸入例子

100 100 100 99 99 99 100 100 100

輸出例子

99 100

1.1.3.18使用一個隊列模擬一個棧,在空白處實現(xiàn)下面類中的方法即可。

class Queue(objec ):

defenqueue(self,item):

"''""入隊""""

defdequcue(self):

""""出隊"""

測試

q = Queue()

9 enqucue (1)

輸出q [1]

q.enqueue(4)

輸出q [1,4]

q.dequeue()

輸出14

1.1.3.19從一個網(wǎng)站上面分別下載100個圖片,他們的網(wǎng)址是 http://download.linekong.com/img/1.png 、http://download.linekong.com/img/2.png ... http://download.linekong.com/img/100.png 批量下載100個圖片文件,并找出大于500kb的文件

1.1.3.20一個文本文件info.txt每行都是以逗號分隔,其中第二列都是數(shù)字,請對該文件按照第二列從小到大排列。

aa,101

bb,302

cc,222

dd,44

1.1.3.21通過shell如何刪除文檔中的注釋和空白行。

1.1.3.22根據(jù)要求寫出linux命令

a.顯示當(dāng)前目錄的內(nèi)容

b.以詳細(xì)格式顯示test用戶的家目錄內(nèi)容,包含隱藏文件

c.進(jìn)入根目錄

d.顯示/etc/passwd文本文件的內(nèi)容

e.顯示/etc/passwd文件的后十行內(nèi)容

1.1.3.23用netstat統(tǒng)計系統(tǒng)當(dāng)前tcp連接的各種狀態(tài)的連接數(shù)

1.1.3.24寫一個腳本,實現(xiàn)判斷10.10.10.0/24網(wǎng)絡(luò)里,當(dāng)前在線的ip有哪些。注:能ping通則認(rèn)為在線。

1.1.3.25怎么把腳本添加到系統(tǒng)服務(wù)里,即使用service來調(diào)用。

1.1.3.26統(tǒng)計指定文件中每個單詞出現(xiàn)的次數(shù);如

cat /etc/fstab

\# /etc/fstab

UUID=94e4e384-Oace-437f-bc96-057dd64f42ee / ext4 defaults.barrier=0 1 1

tmpfs  /dev/shm tmpfs defults 0 0

1.1.3.27練習(xí):寫一個腳本

列出如下菜單給用戶

disk) show disks info;

mem) show memory info;

cpu) show cpu info;

*) quit;

提示用戶給出自己的選擇,而后顯示對應(yīng)其選擇的相應(yīng)系統(tǒng)信息

1.1.3.28請寫出一個shell腳本希望把結(jié)構(gòu)表顯示出來

1.1.3.29求出a.log中的waring 但是不包括waring的行

1.1.3.30說明以下shell 代碼,所完成的功能

n=1

while [ $n -lt 1000 ]

do

cd /root/perl_test/testdir

touch sn.txt

n=expr $n + 1

done

1.1.3.31用最熟悉的腳本語言實現(xiàn)如下功能

如果在/home/pushmail目錄下不存在leadtone目錄,則創(chuàng)建該目錄,并將/var/sync/bin目錄下的所有文件拷貝到leadtone目承下,但是不能夠拷貝文件長

度大于1M的文件。

1.1.3.32根據(jù)要求寫出linux命令

a.顯示當(dāng)前目錄的內(nèi)容

b.以詳細(xì)格式顯示test用戶的家目錄內(nèi)容,包含隱藏文件

c.進(jìn)入根目錄

d.顯示/etc/passwd文本文件的內(nèi)容

e.顯示/etc/passwd文件的后十行內(nèi)容

1.1.3.33查找含有特定字符的文件

1.1.3.34Centos操作系統(tǒng)歷史命令記錄中,執(zhí)行次數(shù)最多的5條

1.1.3.35寫一個腳本,判斷一個指定的腳本是否是語法錯誤,如果有錯誤,則提醒用戶鍵入Q或者q無視錯誤并退出其它任何鍵可以通過vim打開這個指定的腳本

1.1.3.36用Shell編程,判斷一文件是不是字符設(shè)備文件,如果是將其拷貝到 /dev 目錄下

1.1.3.37寫一個腳本,實現(xiàn)批量添加20個用戶,用戶名為user01-20,密碼user后面跟5個隨機字符

1.1.3.38統(tǒng)計nginx訪問日志,找出訪問次數(shù)前10的IP

1.1.3.39找出在文件a中但不在文件b中的內(nèi)容,用命令后編寫腳本實現(xiàn)

1.1.3.40對文件test中,1>第一列為aaa的行求和;2>對偶數(shù)行求和;3>求文件test中的最大值

1.1.3.41Case語句的語法?while 語句的語法?continue命令的作用?

1.1.3.42請寫出下列shell腳本:使用for循環(huán)在/opt目錄下通過隨機小寫10個字母加固定字符串test批量創(chuàng)建10個html文件,創(chuàng)建完成后將test全部改為test_done(for循環(huán)實現(xiàn)),并且html大寫

1.1.3.43在UNIX操作系統(tǒng)中,若用戶鍵入的命令參數(shù)的個數(shù)為1時,執(zhí)行cat 1命令;若用戶鍵入的命令個數(shù)為2時,執(zhí)行cat >>2<$1命令,請將下面所示的shell程序的空缺部分補齊

Case (_____)in

cat $1

cat >>2<1

*)echo 'defult...'

case

$#

$@

$$

$*

1.1.3.44如何在每天23:59分時,將apache的accesslog中,訪問次數(shù)最多的前10個ip以及訪問量最多的10個文件保存到/var/Top.log中

1.1.3.45寫一個腳本,判斷一個指定的腳本是否是語法錯誤。如果有錯誤,則提醒用戶鍵入Q或q無視錯誤并退出其它任何鍵可以指定的腳本

1.1.3.46shell腳本編程:求100以內(nèi)的質(zhì)數(shù)

1.1.3.47如果有10個文件夾,每個文件夾都有1,000,000個url,每個url對應(yīng)一個訪問量,請問如何最快找出前1,000,000個訪問量最高的url

1.1.3.48創(chuàng)建一個shell腳本,它從用戶那里接收10個數(shù),并顯示已輸入的最大的數(shù)

1.1.3.49設(shè)計一個shell程序,在每月第一天備份并壓縮/etc目錄的所有內(nèi)容,存放在/root/bak目錄里,且文件名為如下形式y(tǒng)ymmdd_etc,yy為年,mm為月,dd為日。shell陳旭fileback存放在/usr/bin目錄下

1.1.3.50找出系統(tǒng)中父進(jìn)程號為105的所有進(jìn)程,并將其結(jié)束

1.1.3.51如何從history記錄中分析最近500次內(nèi)執(zhí)行最多的命令?如何查找當(dāng)前目錄90天以前的文件并將其刪除?

1.1.3.52寫出命令統(tǒng)計當(dāng)前連接到本機6379端口連接數(shù)最高的ip地址和連接個數(shù),查看自己的ip地址,看這個ip地址所在網(wǎng)段都有哪些機器,任意查看此網(wǎng)段的另外一個ip地址有哪些端口開放了。簡述tcp的幾種連接狀態(tài),高并發(fā)服務(wù)器一般會遇到什么問題?

1.1.3.53下面給出了一個shell程序,試對其行后有#(號碼)形式的語句進(jìn)行解釋,并說明程序完成的功能

#!/bin/bash

DICNAME=`ls /root |grep bak`  #(1)

if [ -z "$DICNAME" ] then #(2)

mkdir /root/bak cd /root/bak #(3)

fi

YY=`date +%y` MM=`date +%m` DD=`date +%d` #(4)

BACKETC=$YY$MM$DD_etc.tar.gz #(5)

tar zcvf $BACKETC /etc #(6)

echo "fileback fiaished!"

1.1.3.54試編寫一個Shell程序,該程序能接收用戶從鍵盤輸入的100個整數(shù),然后求出其總和、最大值及最小值

1.1.3.55請用自己熟悉的腳本語言,快速替換notice服務(wù)下config.properties配置文件中所有變量值為jdbc.username,jdbc.password的值為blue和pass1234 說明:配置文件的目錄/opt/blue/notice/conf/config.properties

config.properties文件格式如下:

zookeeper.server=127.0.0.1:2181

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://lx-db:3306/gudong

jdbc.username=lanxin

jdbc.password=OnLIDX5

1.1.3.56會哪些編程語言?寫過哪種shell腳本?請現(xiàn)場編寫一組

1.1.3.57判斷數(shù)字大于500則執(zhí)行big.sh 小于等于500則退出腳本,并輸出報錯信息

1.1.3.58處理以下文件內(nèi)容,將域名取出并進(jìn)行計數(shù)排序

http://www.baidu.com/index.html

http://www.baidu.com/1.jpg

http://post.baidu.com/index.php

http://mp3.baidu.com/index.jsp

http://www.baidu.com/3.html

http://post.baidu.com/2.bmp

得到如下結(jié)果:

域名的出現(xiàn)的次數(shù) 域名

3 www.baidu.com

2 post.baidu.com

1 mp3.baidu.com

1.1.3.59文件ip.txt中包含很多IP地址(以及其它非IP數(shù)據(jù)),請打印出滿足A.B.C.D 其中A=172 C=130 D<=100 條件的所有IP(請用AWK實現(xiàn))

1.1.3.60請編寫一個可遞歸創(chuàng)建3級hash目錄的shell腳本,hash目錄名分別為 a b c d e f 0 1 2 3 4 5 6 7 8 9 (請用bash實現(xiàn))

1.1.3.61統(tǒng)計web服務(wù)器上網(wǎng)絡(luò)連接的各個狀態(tài)(ESTABLISHED/SYN_SENT/SYN_RECV等)的個數(shù)并按倒序排列

1.1.3.62腳本測試test.txt文件

1 2 3

4 5 6

7 8 9

打印出每一列的累加值

1.1.3.63請在linux下寫個bash shell 程序,目的如下:查找/opt/mp3目錄下所有mp3后綴的文件,然后計算下每個md5值,文件名跟md5值寫入新的文件mp3-md5.txt文件

1.1.3.64請寫出完成下面工作的Linux shell命令或腳本

(1)查看服務(wù)器的硬盤占用量

(2)將/usr/test目錄下大于100K的文件轉(zhuǎn)移到/tmp目錄下

(3)殺死所有啟動的servicefx_asr進(jìn)程

(4)假設(shè)某nginx server的日志access.log如下:

198.24.230.194 - - [10/Oct/2015:10:23:50 +0800] “POST /asr/recognize HTTP/1.1 200 177 “-” ”-”

請查找在2015/10/10,10點這一個小時內(nèi),訪問“/CheckAuth”接口的IP一共有幾個,每個各訪問了多少次

1.1.3.65執(zhí)行$ time sleep 2 輸出如下

real 0m2.003s

user 0m0.004s

sys 0m0.000s

請說明real、user、sys三者具體代表的意思和區(qū)別

1.1.3.66編寫腳本完成以下工作

某目錄下有兩個文件a.txt和b.txt,文件格式為(ip username),例如:

a.txt b.txt

127.0.0.1zhangsan 127.0.0..4lixiaoliu

127.0.0.1wangxiaoer 127.0.0.01lisi

127.0.0.2lisi

127.0.0.3wangwu

每個文件至少有100萬行,請使用Linux命令完成下列工作

1)兩個文件各自的IP數(shù),以及總IP數(shù)

2)出現(xiàn)再b.txt而沒有出現(xiàn)再a.txt的IP

3)每個username出現(xiàn)的次數(shù),以及每個username對應(yīng)的IP數(shù)

1.1.3.67現(xiàn)在一個REST API服務(wù)(名稱為ab-service),進(jìn)程啟動后占用8038端口進(jìn)行網(wǎng)絡(luò)通信?,F(xiàn)需要一個Bash Shell腳本(start.sh),在一臺Linux機器上啟動這個服務(wù),并通過8038端口對所有內(nèi)外網(wǎng)IP服務(wù)。請寫出完整的可運行腳本,并盡量考慮可能出現(xiàn)的情況并處理

三.其他筆試題 面試題

博客目錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容