shell編程都有哪些面試題?Linux運維學習

shell編程都有哪些面試題?Linux運維學習要注意什麼?

第1章 Shell

1 選擇

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

$HOME $PWD $PS1 $PS2

1.2 在shell腳本中,用來讀取文件內各個域的內容並將其賦值給shell變量的命令是__

fold join tr read

1.3 從後臺啓動進程,應在命令的結尾加上符號()

A:&br/>B:@
C:#
D:$

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

A:管道
B:輸入輸出重定向
C:執行後臺進程
D:處理程序命令


1.5 退出交互模式的shell,應鍵入()

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

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

bash
ruby
PHP
perl


1.7 以下函數中,和其他函數不屬於一類的是

Read pread write pwrite fseek lseek

1.8 下列變量名中有效的shell變量名是:__

-2-time _2$3 trust_no_1 2004file

1.9 下列對shell變量FRUTT操作,正確的是__

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

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

1.10在shell編程中關於$2的描述正確的是

程序後攜帶了兩個位數參數 宏替換

程序後面攜帶的第二個位置參數 攜帶位置參數的個數

1.11在shell環境下想把‘gyyx’值賦給變量company,下面哪個是正確的:

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


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.13下面表述錯誤的是

0表示程序的執行名字n 表示程序的第n個參數值

$* 表示程序的所有參數個數 $$表示程序的PID

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.15在shell腳本中,用來讀取文件內各個域的內容並將其賦值給shell變量的命令是:

Fold join tr read

1.16shell中如何跳出當前循環繼續之後的循環

break continue exit kill

1.17shell腳本中的註釋符

# // /**/ " "

1.18採用bash執行shell腳本時加上哪個參數可以跟蹤執行腳本過程

-x -u -f -p

1.19以下命令執行後,結果爲()

Var1=abcdedf

Var2=abcded

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

無結果 語法錯誤 yes no

1.20在shell比較運算符中,數值測試“等於則爲真”的是()

-ne -ge -eq -le

2 填空

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

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

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

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

2.4 Linux系統shell腳本第一行需寫__代表什麼意義_____

2.5 編寫shell腳本時註釋符是_____

2.6 shell命令“sed -i s/\r/ /g test.txt”實現的是___

3 簡答

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

3.2 統計/var/log下文件的個數。

3.3 如何將F1文件的運行結果輸出到F2.txt裏?

3.4 寫一個腳本實現判斷192.168.1.0/24 網絡裏,當前在線的ip有哪些,能拼通則認爲在哪

3.5 根據以下信息:

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三項下的內容取出來,值以“:”分割,並呈格式顯示出來。注:

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

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

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

直接複製 使用read命令 使用命令行傳參 使用命令輸出

3.7 編寫一個腳本,5分鐘檢查一次日誌,發現有暴力SSH破解現象的,提取此類IP地址,並去重,並按降序排序。

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

日誌樣式:

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

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

3.9 檢查IP地址合規,請用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

3.11在單臺服務器Linux操作系統環境下,寫一行命令,將所有該機器的所有以“.log.bak“爲後綴的文件,打包壓縮並上傳到ftp上,FTP地址爲123.234.25.130的/home/bak文件夾

3.12Linux腳本:現在要刪除本機中若干文件,/root/file.list中記錄了這些文件的絕對路徑,請用腳本實現。/root/file.list內容範例:/tmp/1.file

3.13說出shell的種類,已經常用的shell

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)

3.16創建一個函數,能接受兩個參數;

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

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

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

3.17有一個長度爲n序列,需要移除掉裏面的重複元素,但是對於每種元素保留最後出現的那個。輸入描述:輸入包括兩行

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

第二行爲n個數scqucencel,以空格分隔

輸出描述

輸出消除重複元素之後的序列,以空格分隔,行末無空格

輸入例子

100 100 100 99 99 99 100 100 100

輸出例子

99 100

3.18使用一個隊列模擬一個棧,在空白處實現下面類中的方法即可。

class Queue(objec ):

defenqueue(self,item):

"''""入隊""""

defdequcue(self):

""""出隊"""

測試

q = Queue()

9 enqucue (1)

輸出q [1]

q.enqueue(4)

輸出q [1,4]

q.dequeue()

輸出14

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

aa,101

bb,302

cc,222

dd,44

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

3.22根據要求寫出linux命令

a.顯示當前目錄的內容

b.以詳細格式顯示test用戶的家目錄內容,包含隱藏文件

c.進入根目錄

d.顯示/etc/passwd文本文件的內容

e.顯示/etc/passwd文件的後十行內容

3.23用netstat統計系統當前tcp連接的各種狀態的連接數

3.24寫一個腳本,實現判斷10.10.10.0/24網絡裏,當前在線的ip有哪些。注:能ping通則認爲在線。

3.25怎麼把腳本添加到系統服務裏,即使用service來調用。

3.26統計指定文件中每個單詞出現的次數;如

cat /etc/fstab

\# /etc/fstab

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

tmpfs  /dev/shm tmpfs defults 0 0

3.27練習:寫一個腳本

列出如下菜單給用戶

disk) show disks info;

mem) show memory info;

cpu) show cpu info;

*) quit;

提示用戶給出自己的選擇,而後顯示對應其選擇的相應系統信息

3.28請寫出一個shell腳本希望把結構表顯示出來

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

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

n=1
while [ $n -lt 1000 ]; do
    cd /root/perl_test/testdir
    touch sn.txt
    n=expr $n + 1
done

3.31用最熟悉的腳本語言實現如下功能

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

度大於1M的文件。

3.32根據要求寫出linux命令

a.顯示當前目錄的內容

b.以詳細格式顯示test用戶的家目錄內容,包含隱藏文件

c.進入根目錄

d.顯示/etc/passwd文本文件的內容

e.顯示/etc/passwd文件的後十行內容

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

3.34Centos操作系統歷史命令記錄中,執行次數最多的5條

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

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

3.37寫一個腳本,實現批量添加20個用戶,用戶名爲user01-20,密碼user後面跟5個隨機字符

3.38統計nginx訪問日誌,找出訪問次數前10的IP

3.39找出在文件a中但不在文件b中的內容,用命令後編寫腳本實現

3.40對文件test中,1>第一列爲aaa的行求和;2>對偶數行求和;3>求文件test中的最大值

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

3.42請寫出下列shell腳本:使用for循環在/opt目錄下通過隨機小寫10個字母加固定字符串test批量創建10個html文件,創建完成後將test全部改爲test_done(for循環實現),並且html大寫

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

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

3.46shell腳本編程:求100以內的質數

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

3.48創建一個shell腳本,它從用戶那裏接收10個數,並顯示已輸入的最大的數

3.49設計一個shell程序,在每月第一天備份並壓縮/etc目錄的所有內容,存放在/root/bak目錄裏,且文件名爲如下形式yymmdd_etc,yy爲年,mm爲月,dd爲日。shell陳旭fileback存放在/usr/bin目錄下

3.50找出系統中父進程號爲105的所有進程,並將其結束

3.51如何從history記錄中分析最近500次內執行最多的命令?如何查找當前目錄90天以前的文件並將其刪除?

3.52寫出命令統計當前連接到本機6379端口連接數最高的ip地址和連接個數,查看自己的ip地址,看這個ip地址所在網段都有哪些機器,任意查看此網段的另外一個ip地址有哪些端口開放了。簡述tcp的幾種連接狀態,高併發服務器一般會遇到什麼問題?

3.53下面給出了一個shell程序,試對其行後有#(號碼)形式的語句進行解釋,並說明程序完成的功能

#!/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!"

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

3.55請用自己熟悉的腳本語言,快速替換notice服務下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

3.56會哪些編程語言?寫過哪種shell腳本?請現場編寫一組

3.57判斷數字大於500則執行big.sh 小於等於500則退出腳本,並輸出報錯信息

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

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

3.61統計web服務器上網絡連接的各個狀態(ESTABLISHED/SYN_SENT/SYN_RECV等)的個數並按倒序排列

3.62腳本測試test.txt文件

1 2 3

4 5 6

7 8 9

打印出每一列的累加值

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

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

(1)查看服務器的硬盤佔用量

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

(3)殺死所有啓動的servicefx_asr進程

(4)假設某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點這一個小時內,訪問“/CheckAuth”接口的IP一共有幾個,每個各訪問了多少次

3.65執行$ time sleep 2 輸出如下

real 0m2.003s

user 0m0.004s

sys 0m0.000s

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

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數,以及總IP數

2)出現再b.txt而沒有出現再a.txt的IP

3)每個username出現的次數,以及每個username對應的IP數

3.67現在一個REST API服務(名稱爲ab-service),進程啓動後佔用8038端口進行網絡通信。現需要一個Bash Shell腳本(start.sh),在一臺Linux機器上啓動這個服務,並通過8038端口對所有內外網IP服務。請寫出完整的可運行腳本,並儘量考慮可能出現的情況並處理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章