Shell脚本实战试题及详细答案_第1页
Shell脚本实战试题及详细答案_第2页
Shell脚本实战试题及详细答案_第3页
Shell脚本实战试题及详细答案_第4页
Shell脚本实战试题及详细答案_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Shell脚本实战试题及详细答案适用人群:Linux运维、后端开发、测试工程师(入门-中级)考试时长90分钟满分100分说明:试题贴合线上生产环境实操场景,无偏题怪题,侧重Shell基础语法、变量、流程控制、循环、函数、文件处理、日志筛选等常用核心知识点。一、单项选择题(共10题,每题3分,共30分)1.Linux系统中,默认的Shell解释器是?()A.shB.bashC.zshD.csh2.以下关于Shell脚本注释的写法,正确的是?()A.//注释内容B./*注释内容*/C.#注释内容D.--注释内容3.在Shell中,用于定义全局变量(当前脚本全程生效)的方式是?()A.localB.defineC.直接赋值D.global4.以下哪个变量可以获取脚本执行时传入的第一个参数?()A.$0B.$1C.$#D.$*5.判断文件是否存在的Shell测试参数是?()A.-dB.-fC.-eD.-s6.想要静默执行命令,丢弃所有标准输出和错误输出,正确的写法是?()A.>/dev/nullB.2>/dev/nullC.&>/dev/nullD.>2&17.Shell中for循环遍历数组,以下写法规范的是?()A.foriinarrayB.foriin${array[@]}C.for(i=0;i<len;i++)D.forarray8.用于获取上一条命令执行返回状态码的变量是?()A.$?B.$$C.$!D.$@9.以下哪个命令可以实现字符串截取,提取变量前3个字符?()A.cutB.grepC.${var:0:3}D.sed10.Shell函数中,定义局部变量的关键字是?()A.varB.setC.localD.env二、填空题(共5题,每题4分,共20分)1.编写Shell脚本的首行固定声明是__________,用于指定脚本解释器。2.变量$#的作用是__________。3.循环中,__________语句用于跳出当前本次循环,进入下一次循环;__________语句用于终止整个循环。4.判断变量是否为空的测试参数是__________,判断变量不为空的测试参数是__________。5.脚本中$$代表__________,$!代表__________。三、简答题(共3题,每题6分,共18分)1.简述$*和$@的区别。2.简述Shell中双引号""和单引号''的区别。3.简述if判断中[]和[[]]的核心区别。四、纠错题(共2题,每题6分,共12分)要求:找出代码中的错误,说明原因并写出修正后代码1.以下脚本意图:判断传入参数是否为空,为空则提示报错退出PlainText

#!/bin/bash

if[$1=""]

then

echo"参数不能为空"

exit1

fi2.以下脚本意图:循环输出1-5数字PlainText

#!/bin/bash

foriin12345

do

echoi

done五、编程实操题(共2题,每题10分,共20分)1.编写Shell脚本:接收用户输入的文件名,判断文件是否存在、是否为普通文件、是否有可读权限,根据不同情况输出对应提示信息。2.编写Shell脚本:定义数组存储3个服务名称(nginx、mysql、redis),循环遍历数组,逐个判断服务是否启动,未启动则输出“服务名未运行”,已启动则输出“服务名运行正常”。详细参考答案一、单项选择题答案及解析1.B解析:CentOS、Ubuntu等主流Linux系统默认登录Shell为bash,sh是bash的兼容链接,zsh、csh为扩展Shell,非默认。2.C解析:Shell脚本仅支持#单行注释,//、/**/为编程语言注释,--为数据库注释,均不适用于Shell。3.C解析:Shell中直接赋值的变量为全局变量,脚本全程生效;local仅用于函数内定义局部变量,无define、global关键字。4.B解析:$0代表脚本本身名称,$1第一个参数,$#代表参数个数,$*代表所有参数。5.C解析:-d判断是否为目录,-f判断是否为普通文件,-e判断文件/目录是否存在,-s判断文件是否非空。6.C解析:&>/dev/null可同时丢弃标准输出(1)和错误输出(2);A仅屏蔽标准输出,B仅屏蔽错误输出,D写法错误。7.B解析:${array[@]}是Shell遍历数组所有元素的标准规范写法,兼容性最好,其余写法均不规范。8.A解析:$?上一条命令执行状态码(0成功,非0失败);$$当前脚本PID;$!后台运行进程PID。9.C解析:Shell内置字符串截取语法${变量:起始位置:长度},无需调用外部命令,效率更高;cut、sed为外部文本处理命令。10.C解析:函数内使用local定义局部变量,仅在函数内生效,函数执行结束变量销毁。二、填空题答案1.#!/bin/bash2.获取脚本传入的参数总个数3.continue;break4.-z;-n5.当前脚本的进程PID;最后一个后台运行进程的PID三、简答题答案1.$*和$@的区别两者均表示获取脚本所有传入参数,核心差异体现在加双引号后:(1)"$*":会将所有参数合并为一个完整字符串,参数之间用空格拼接;(2)"$@":会保留每个参数的独立性,逐个拆分参数,适配带空格的参数场景;实操中统一使用"$@",兼容性更强,避免参数含空格导致解析异常。2.单引号和双引号的区别(1)单引号'':纯原样输出,所有特殊符号($、\、*等)均失效,不解析变量、不转义;(2)双引号"":支持变量解析和转义,会识别$变量、\转义符,通配符等少量特殊符号失效;简单总结:单引号保原样,双引号解变量。3.[]和[[]]的核心区别(1)[]:是Shell内置命令,兼容性极强,支持基础判断,不支持正则、不支持&&、||逻辑运算符,多条件判断需拆分;(2)[[]]:是bash扩展语法,功能更强,支持正则匹配、支持&&、||直接拼接多条件、不会出现变量为空导致的语法报错;实操脚本中优先使用[[]],稳定性更高。四、纠错题答案1.错误分析与修正错误原因:未传参数时,$1为空,代码会解析为[=""],出现语法报错(缺少判断参数)。修正方案:给变量加双引号包裹,或使用-z判断空变量PlainText

#!/bin/bash

if[[-z"$1"]]

then

echo"参数不能为空"

exit1

fi2.错误分析与修正错误原因:echoi为直接输出字符串i,未调用循环变量,无法输出数字。修正方案:变量调用需加$符号PlainText

#!/bin/bash

foriin12345

do

echo$i

done五、编程实操题参考答案1.文件判断脚本PlainText

#!/bin/bash

#接收用户输入文件名

read-p"请输入需要检测的文件名:"filename

#判断文件是否存在

if[[!-e"$filename"]]

then

echo"错误:文件$filename不存在!"

exit1

fi

#判断是否为普通文件

if[[!-f"$filename"]]

then

echo"提示:$filename不是普通文件(可能是目录或其他文件)"

else

echo"确认:$filename是普通文件"

fi

#判断可读权限

if[[-r"$filename"]]

then

echo"权限检测:文件可读"

else

echo"权限检测:文件无读取权限"

fi2.服务状态检测脚本PlainText

#!/bin/bash

#定义服务数组

service_arr=("nginx""mysql""redis")

#循环遍历检测服务

forservicein${service_arr[@]}

do

#过滤服务进程,静默执行

pid=$(ps-ef|grep$servic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论