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

下载本文档

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

文档简介

Shell面试题及详细答案(企业真实版)一、Shell基础概念题(入门高频)1、什么是Shell?常用Shell类型有哪些?详细答案:Shell是Linux/UNIX系统的命令行解释器,是用户和系统内核之间的桥梁。用户输入的所有命令,都会由Shell翻译后交给内核执行,同时它也是一门脚本编程语言,可批量执行命令、自动化运维操作。企业最常用的3种Shell:bash:绝大多数Linux系统默认Shell,功能最全、兼容性最好,运维主流使用sh:最早的BourneShell,兼容性极强,语法精简,部分老旧系统默认使用zsh:交互体验更好,常用于个人终端,服务器生产环境极少使用查看系统默认Shell命令:echo$SHELL2、bash和sh的核心区别是什么?详细答案:sh是标准Shell,语法遵循POSIX规范,功能基础、无扩展特性;bash是sh的增强升级版,完全兼容sh语法,同时新增大量实用功能。核心差异:bash支持命令补全、历史命令回溯、别名设置,sh不支持bash支持数组、for增强循环、正则匹配,sh不支持脚本中#!/bin/sh会强制使用标准语法,禁用bash扩展功能;#!/bin/bash可使用所有高级特性生产脚本统一推荐写#!/bin/bash,适配所有主流服务器。3、Shell脚本的执行方式有哪些?区别是什么?详细答案:共4种常用执行方式,核心差异是是否开启子进程、是否继承环境变量。bash脚本名.sh/sh脚本名.sh./脚本名.sh(需脚本有执行权限chmod+x)source脚本名.sh/.脚本名.shcat脚本名.sh|bash关键区别:前两种、第四种:开启子进程执行,脚本内定义的变量、环境变量修改,执行结束后不会保留在当前终端source执行:当前终端进程执行,脚本的变量、配置、环境变量会直接生效并永久保留,常用于加载环境配置脚本二、Shell变量与运算符(面试必考)4、Shell中环境变量、全局变量、局部变量的区别?详细答案:局部变量:仅在当前脚本/当前终端生效,子程序、子进程无法调用,直接定义a=10即为局部变量全局变量(自定义环境变量):通过exporta=10定义,当前终端和所有子进程、子脚本都可调用,关闭终端后失效系统环境变量:系统自带(PATH、USER、HOME等),所有进程、所有用户均可调用,永久生效5、Shell特殊位置参数$0、$1、$#、$*、$@、$?分别代表什么?详细答案:$0:脚本本身的文件名/执行命令$1-$9:脚本传入的第1到第9个参数,10个以上参数需用${10}取值$#:传入脚本的参数总个数,常用于参数校验$?:上一条命令的执行返回状态码,0代表执行成功,非0代表失败$*:接收所有参数,视为单个字符串,参数含空格时会被拆分$@:接收所有参数,保留每个参数的独立性,参数含空格也不会错乱,生产环境优先用$@6、$*和$@的核心差异(面试高频追问)详细答案:不加双引号时,两者基本无区别;加双引号后差异极大:"$*":将所有传入参数合并为一个整体字符串"$@":将每个参数单独保留,是参数数组形式实战场景:遍历带空格的参数(如文件名、带空格的路径),必须用"$@",否则参数会拆分出错。三、Shell流程控制(判断、循环)7、Shell中if判断的文件常用参数有哪些?详细答案:企业脚本最常用的文件判断参数:-f:判断是否为普通文件且存在-d:判断是否为目录且存在-e:判断文件/目录是否存在(不区分类型)-r:判断文件是否有读权限-w:判断文件是否有写权限-x:判断文件是否有执行权限示例代码:PlainText

if[!-d/data];then

mkdir-p/data

fi8、Shell中字符串、数字判断常用参数详细答案:数字比较(仅用于整数):-eq:等于-ne:不等于-gt:大于-lt:小于-ge:大于等于-le:小于等于字符串比较:=:字符串相等!=:字符串不相等-z:字符串为空-n:字符串非空注意:Shell中不能直接用>、<、==做数字判断,会报错或逻辑异常。9、for、while、until循环的区别及适用场景详细答案:for循环:适合已知循环次数/遍历对象,比如遍历文件、遍历参数、批量修改文件while循环:适合条件满足就持续执行,比如监控进程、循环读取日志、等待服务启动until循环:和while相反,条件不满足时循环,条件满足停止,生产环境使用极少四、Shell高频实操命令(脚本核心)10、简述grep、sed、awk的分工和适用场景详细答案:三者是Shell文本处理三剑客,分工明确,企业脚本固定用法:grep:只查不改,专门用于过滤、匹配、检索文本内容,筛选日志、匹配关键字sed:批量修改文本,擅长行级操作,替换字符、删除行、新增行、批量修改配置文件awk:数据分析、切片、统计,擅长列级操作,截取字段、统计行数、求和、过滤列数据11、Shell中&和&&、|和||的区别详细答案:&:后台运行命令,不占用当前终端,比如nohup./start.sh&&:前一条命令执行成功,才执行后一条命令|:管道符,将前一条命令的输出,作为后一条命令的输入||:前一条命令执行失败,才执行后一条命令(常用于容错)实战示例:mkdir/test&&echo"创建成功"||echo"创建失败"12、反引号``和$()的区别详细答案:两者功能一致,都是命令替换,将命令执行结果赋值给变量。核心区别:反引号``:容易和单引号混淆,不支持嵌套,老旧脚本常用$():可读性强,支持多层嵌套,现代企业脚本统一使用$()推荐写法:time=$(date+%Y-%m-%d)五、Shell脚本编程实战题(面试手写)13、编写脚本:判断参数是否为空,为空则提示用法并退出详细答案(可直接上线):PlainText

#!/bin/bash

#参数校验脚本

if[$#-eq0];then

echo"错误:未传入参数!"

echo"用法:$0自定义参数"

exit1

fi

echo"传入参数为:$@"14、编写脚本:批量备份/etc目录下所有.conf配置文件到/backup目录,保留日期后缀详细答案(可直接上线):PlainText

#!/bin/bash

#配置文件批量备份脚本

date=$(date+%Y%m%d)

backup_dir="/backup"

#判断备份目录是否存在,不存在则创建

[!-d$backup_dir]&&mkdir-p$backup_dir

#批量备份conf文件

cp-r/etc/*.conf$backup_dir/conf_$date

echo"配置文件备份完成,备份目录:$backup_dir/conf_$date"15、编写脚本:监控Nginx进程,挂掉自动重启详细答案(运维高频脚本):PlainText

#!/bin/bash

#Nginx守护监控脚本

nginx_status=$(ps-ef|grepnginx|grep-vgrep|wc-l)

if[$nginx_status-eq0];then

systemctlstartnginx

echo"$(date)Nginx异常,已自动重启">>/var/log/nginx_monitor.log

fi配合crontab定时执行,实现永久监控。六、Shell故障排查与面试坑点16、Shell脚本执行报错syntaxerror:unexpectedendoffile是什么原因?详细答案:该报错是语法闭合异常,99%场景为以下问题:if/for/while语句缺少fi/done结尾闭合Windows编辑脚本上传服务器,存在换行符\r\n兼容问题括号、引号未成对出现解决换行符问题命令:dos2unix脚本名.sh17、脚本内定义的变量,执行完脚本在终端无法获取,为什么?详细答案:因为使用了bash./脚本.sh或./脚本.sh执行,脚本

温馨提示

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

评论

0/150

提交评论