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

下载本文档

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

文档简介

Shell脚本面试题及详细答案(实战版)本套面试题精选一线运维、开发岗位高频Shell面试考点,从基础语法、变量流程控制、文件处理、正则命令、脚本实战、故障排错、高级进阶七个维度整理,答案贴合工作实战,摒弃书面化套话,适配初中级面试场景。一、基础概念类(入门高频)1、什么是Shell脚本?日常工作中主要用来做什么?答案:Shell脚本是基于Linux/UnixShell解释器编写的批处理文件,本质是多条系统命令的集合,无需编译、直接解释执行。工作中核心用途:自动化运维(日志清理、备份同步、定时任务)、服务启停、批量处理文件、环境部署、数据筛选统计、自动化巡检等,替代重复的手动敲命令操作,提升工作效率。2、Linux常见的Shell解释器有哪些?脚本头部#!/bin/bash含义是什么?答案:常见解释器:bash(默认、最常用)、sh、zsh、csh、tcsh。#!/bin/bash是脚本解释器声明,必须写在脚本第一行,作用是指定当前脚本由bash解释器执行。如果不声明,系统会使用默认Shell执行,可能出现语法兼容报错。补充:#除头部声明外,其余位置均为单行注释。3、Shell脚本中三种执行方式及区别?答案:1)./test.sh:需要脚本有执行权限(chmod+x),在子Shell中执行,不影响当前终端环境。2)bashtest.sh:无需执行权限,直接调用bash解释器运行,子Shell执行,最常用、最安全。3)sourcetest.sh或.test.sh:无需执行权限,在当前Shell执行,脚本中的变量、环境配置会直接生效,常用于加载环境变量、配置文件。二、变量与参数类(必考)4、Shell中自定义变量、环境变量、位置变量的区别?答案:1)自定义变量:仅当前Shell会话有效,子Shell无法读取,脚本内临时使用,定义格式:name="test"2)环境变量:全局有效,子Shell、系统程序均可读取,export变量名=值,常用于全局配置(PATH、JAVA_HOME)3)位置变量:脚本传参专用,执行脚本时后跟参数调用$0:脚本本身名称$1-$9:第1到第9个参数,10个以上参数用${10}、${11}$#:传入参数总个数$*:所有参数整体作为一个字符串$@:所有参数独立分开,循环遍历优先用$@$?:上一条命令执行返回状态,0为成功,非0为失败$$:当前脚本进程PID5、双引号、单引号、反引号的区别?答案:1)单引号'':纯原样输出,不解析变量、不解析命令,所有内容均作为普通字符串2)双引号"":解析变量和转义字符,保留字符串格式,日常定义变量、拼接字符串首选3)反引号``:执行系统命令,等价于$(),用于嵌套命令执行并获取返回结果实战建议:优先用$()替代反引号,嵌套多层命令时可读性更好、不易出错。三、流程控制语句(脚本核心)6、Shell中if条件判断语法及常用判断参数?答案:基础语法:PlainText

if[条件];then

执行语句

elif[条件];then

执行语句

else

执行语句

fi常用文件判断:-f:判断是否为普通文件、是否存在-d:判断是否为目录-e:判断文件/目录是否存在-r/-w/-x:判断是否有读、写、执行权限常用字符串判断:-z字符串:判断字符串是否为空-n字符串:判断字符串是否非空str1==str2:判断字符串相等常用数字判断:-eq等于、-ne不等于、-gt大于、-lt小于、-ge大于等于、-le小于等于7、for、while循环的用法及适用场景?答案:1)for循环:适合已知循环次数、遍历固定对象(文件、参数、数组)经典遍历写法:PlainText

forfilein`ls/data`;do

echo$file

done2)while循环:适合未知循环次数、按条件持续执行,常用于逐行读取文件、持续监控进程逐行读文件经典写法(工作最常用):PlainText

whilereadline;do

echo$line

done<test.txt8、case语句的作用?日常使用场景?答案:case是多分支匹配语句,用于替代多层层级的ifelif,代码更简洁。核心场景:服务启停脚本(start/stop/restart/status)、脚本传参判断。示例:PlainText

case$1in

start)echo"启动服务";;

stop)echo"停止服务";;

restart)echo"重启服务";;

*)echo"参数错误";;

esac四、高频命令与文件处理(实战必考)9、grep、sed、awk三者的区别及适用场景?答案:三者是Shell文本处理三剑客,分工明确:1)grep:主打文本查找过滤,只负责筛选匹配的行,不修改内容常用参数:-v反向匹配、-n显示行号、-i忽略大小写、-r递归查找2)sed:主打文本行编辑,批量替换、删除、新增行,适合整行操作常用:sed-i's/旧内容/新内容/g'文件名(全局替换,-i直接修改文件)3)awk:主打文本列处理、数据统计,擅长切片、过滤字段、求和、统计行数常用:awk'{print$1}'取第一列、awk'NR>1'跳过第一行10、如何批量替换文件夹下所有文件的指定内容?答案:结合find+sed实现,生产常用命令:PlainText

find/data-typef-name"*.txt"-execsed-i's/aaa/bbb/g'{}\;解析:find查找/data下所有txt文件,sed批量将aaa替换为bbb,-i直接写入文件生效。11、如何统计日志中某个关键字出现的次数?答案:两种常用方式:1)精准统计行数(常用):grep"关键字"log.txt|wc-l2)统计所有匹配字符次数:grep-o"关键字"log.txt|wc-l区别:第一种一行匹配多次只算1次,第二种每行中所有匹配内容全部统计。五、脚本实战编程(手写代码题)12、编写脚本:判断文件是否存在,不存在则创建,存在则提示已存在答案:PlainText

#!/bin/bash

file="/data/test.txt"

if[!-f$file];then

touch$file

echo"文件创建成功"

else

echo"文件已存在,无需创建"

fi13、编写脚本:批量删除30天前的日志文件答案:生产清理日志经典脚本,安全高效:PlainText

#!/bin/bash

#定义日志目录

log_dir="/var/log"

#删除30天前的.log日志文件

find$log_dir-typef-name"*.log"-mtime+30-delete

echo"30天前日志清理完成"参数说明:-mtime+30代表修改时间大于30天的文件,-delete直接删除,替代rm操作更安全。14、编写脚本:监控Nginx状态,挂掉自动重启答案:PlainText

#!/bin/bash

#检测Nginx进程是否存在

nginx_status=`ps-ef|grepnginx|grep-vgrep|wc-l`

if[$nginx_status-eq0];then

systemctlstartnginx

echo"Nginx已宕机,已自动重启">>/var/log/nginx_monitor.log

else

echo"Nginx运行正常"

fi实操搭配:加入crontab定时任务,每分钟执行一次,实现7*24监控。六、报错排错与实战技巧15、脚本执行报错[:missing]是什么原因?如何解决?答案:最常见语法错误,核心原因:1)中括号前后缺少空格(最高频),错误写法:[$1==start],正确写法:[$1==start]2)语句少写分号、fi、done、esac等结束符3)变量为空导致判断语法异常,可给变量加双引号规避:["$name"=="test"]16、Shell脚本如何调试?答案:三种常用调试方式:1)局部调试:脚本内需要调试的行前加set-x,开启打印执行过程,set+x关闭调试2)全局调试:bash-xtest.sh执行脚本,全程打印每一步执行命令和结果3)语法检测:bash-ntest.sh,只检查语法错误,不执行脚本17、$?返回非0,常见原因有哪些?答案:1)上一条命令路径错误、文件不存在2)权限不足,无法执行读写操作3)命令参数错误、语法不规范4)进程已存在/不存在,启停服务失败七、高级进阶面试题18、Shell数组如何定义和遍历?答案:数组定义:arr=("java""python""shell")遍历方式:PlainText

#!/bin/bash

arr=("java""python""shell")

foriin${arr[@]};do

echo$i

done${arr[@]}:遍历所有元素,${#arr[@]}:获取数组元素个数。19、crontab定时任务语法格式?如何实现每天凌晨2点执行脚本?答案:crontab格式:分时日月周执行命令每天凌晨2点执行:02***/bin/bash/data

温馨提示

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

评论

0/150

提交评论