Shell 脚本实战面试题(真实企业面试版)_第1页
Shell 脚本实战面试题(真实企业面试版)_第2页
Shell 脚本实战面试题(真实企业面试版)_第3页
Shell 脚本实战面试题(真实企业面试版)_第4页
Shell 脚本实战面试题(真实企业面试版)_第5页
已阅读5页,还剩1页未读, 继续免费阅读

下载本文档

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

文档简介

Shell脚本实战面试题(真实企业面试版)说明:本套题目贴合Linux运维、后端开发、测试岗位真实面试场景,摒弃书面化考题,侧重实操、排错、业务场景落地,分为基础题、实操题、排错题、高阶场景题四个模块,附带标准答案。一、基础认知题(入门必问)1、简述Shell脚本的执行方式有哪几种?区别是什么?参考答案:1)./test.sh:需要脚本有执行权限(chmod+x),在子Shell中执行,会加载脚本内所有环境变量、配置;2)shtest.sh/bashtest.sh:无需执行权限,直接指定解释器运行,子Shell执行;3)sourcetest.sh/.test.sh:无需执行权限,在当前Shell进程执行,脚本内的变量、函数会保留在当前终端环境中;核心区别:是否开启子Shell执行,是否保留脚本环境到当前终端。2、Shell中$0、$1、$#、$*、$@、$?、$$分别代表什么?参考答案:$0:脚本本身的文件名;$1-$9:脚本的第1到第9个位置参数;$#:脚本传入的参数总个数;$*:所有传入参数,视为一个整体字符串;$@:所有传入参数,逐个独立区分,遍历场景更常用;$?:上一条命令的执行返回状态(0为成功,非0为失败);$$:当前脚本的进程PID。3、双引号、单引号、反引号的区别?参考答案:单引号:纯原样输出,屏蔽所有变量、命令、转义符,内容原样保留;双引号:保留变量解析、转义功能,屏蔽通配符(*、?),适合带空格的字符串;反引号``:用于执行系统命令,可嵌套解析命令结果,等价于$()(推荐$(),支持嵌套、可读性更强)。二、语法实操题(笔试/上机高频)1、编写脚本:判断当前系统是否为CentOS7,若是则输出系统版本,否则提示系统不兼容。参考答案:bash

#!/bin/bash

sys_version=$(cat/etc/redhat-release|grep-o"7\.")

if[-n"$sys_version"];then

cat/etc/redhat-release

else

echo"当前系统非CentOS7,脚本不兼容"

fi2、写一个循环:批量创建user1-user10十个系统用户,用户家目录统一在/data/user/下。参考答案:bash

#!/bin/bash

mkdir-p/data/user

foriin{1..10}

do

useradd-d/data/user/user$iuser$i

echo"创建用户user$i成功"

done3、简述Shell中if条件[]和[[]]的区别?参考答案:1)[]是系统内置命令,兼容性强,仅支持简单判断,不支持正则、&&、||,变量为空易报错,必须严格空格分隔;2)[[]]是Shell关键字,功能更强,支持正则匹配、逻辑短路、字符串模糊匹配,变量为空不会报错,日常脚本优先使用。4、编写脚本:监控80端口,若端口断开,立即重启nginx服务,并记录日志到/var/log/port_check.log参考答案:bash

#!/bin/bash

log_file="/var/log/port_check.log"

port=80

#检测端口监听状态

netstat-lnp|grep$port>/dev/null2>&1

if[$?-ne0];then

echo"$(date+%Y-%m-%d\%H:%M:%S)80端口异常,重启Nginx">>$log_file

systemctlrestartnginx

fi三、报错排错题(面试重点)1、分析报错:[:等号预期未找到,是什么原因?如何解决?参考答案:报错原因:if判断[符号前后、=前后没有加空格,Shell对空格语法严格;错误写法:[$a=1]正确写法:[$a=1]或[[$a-eq1]]2、脚本手动执行正常,放入crontab定时执行失效,排查思路是什么?参考答案:1)crontab环境变量极简,不会加载用户环境变量,脚本内所有命令必须写绝对路径(如/usr/bin/ls、/usr/bin/systemctl);2)脚本开头添加环境变量配置:source/etc/profile、source~/.bashrc;3)检查脚本权限、日志输出,查看crontab执行日志/var/log/cron;4)排查目录权限、输出重定向问题。3、脚本执行提示syntaxerror:unexpectedendoffile,排查方向?参考答案:1)if/for/while语句未闭合,缺少fi、done;2)脚本是Windows编辑上传,存在DOS换行符(\r\n),使用dos2unix转换格式;3)引号、括号未成对匹配。四、高阶场景面试题(中高级岗位)1、如何让Shell脚本后台永久运行,不受终端关闭影响?区别nohup、screen、&?参考答案:&:仅后台运行,关闭终端进程终止;nohup+&:忽略挂断信号,终端关闭不终止,日志默认输出到nohup.out;screen:虚拟终端,可随时进入、退出会话,适合长时间交互脚本、任务挂机。2、编写脚本:清空服务器30天前的/data/logs/目录下.log日志文件,保留目录结构,且排除today.log文件参考答案:bash

#!/bin/bash

log_path="/data/logs"

find$log_path-name"*.log"!-name"today.log"-mtime+30-delete参数说明:!排除指定文件,-mtime+30表示30天前修改的文件,-delete直接删除。3、Shell脚本中2>&1是什么意思?放在不同位置有什么区别?参考答案:含义:将标准错误输出(2)重定向到标准输出(1),实现正常日志和错误日志统一输出;cmd>log.log2>&1:正确,所有日志写入文件;cmd2>&1>log.log:错误,错误日志会打印到屏幕,只有正常日志写入文件。4、如何实现Shell脚本传入参数自定义,支持可选参数、默认值?参考答案:通过变量默认值赋值实现,示例:bash

#!/bin/bash

#若无传参,默认端口为8080

port=${1:-8080}

echo"当前运行端口:$port"五、综合应用题(面试手写必考)题目:编写一套服务巡检脚本,实现以下功能:1、检测CPU、内存使用率,超过80%输出告警;2、检测磁盘根目录使用率,超过90%输出告警;3、记录所有巡检结果到/var/log/server_check.log;4、正常无告警输出“服务器巡检正常”。参考答案:bash

#!/bin/bash

log=/var/log/server_check.log

date_time=$(date+%Y-%m-%d\%H:%M:%S)

#初始化告警标记

warn=0

echo"======$date_time服务器巡检开始======">>$log

#1.CPU使用率检测

cpu_use=$(top-bn1|grepCpu|awk'{print$2}'|cut-f1-d.)

if[$cpu_use-ge80];then

echo"CPU使用率告警!当前使用率:${cpu_use}%">>$log

warn=1

fi

#2.内存使用率检测

mem_use=$(free|grepMem|awk'{print$3/$2*100}'|cut-f1-d.)

if[$mem_use-ge80];then

echo"内存使用率告警!当前使用率:${mem_use}%">>$log

warn=1

fi

#3.磁盘根目录检测

disk_use=$(df-h/|grep/|awk'{print$5}'|cut-d%-f1)

if[$disk_use-ge90];then

echo"根目录磁盘告警!当前使用率:${disk_use}%">>

温馨提示

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

评论

0/150

提交评论