当前位置: 首页 > news >正文

Shell脚本周考习题及答案

一、Shell 脚本理论简答题(25 道,每题3分)

1.什么是Shell 脚本?在Linux运维中,它主要用于解决哪些实际问题?

Shell 脚本是一个包含一系列 Shell 命令的文本文件,用于自动化执行任务。在 Linux 运维中,它常用于:

自动化系统管理和监控;

批量处理文件或数据;

定时任务(如备份、日志清理);

服务启动/停止脚本;

系统初始化配置。



2.Shell脚本首行#/bin/bash的具体作用是什么?

该行称为 shebang,用于指定脚本的解释器为 /bin/bash,确保脚本使用 Bash 解释器执行。



3.执行 Shell 脚本时,./script.sh和source script.sh(或, script.sh)的核心区别是什么?运维中何时适合用后者?

./script.sh 在子 Shell 中执行,不影响当前 Shell 环境;

source script.sh 在当前 Shell 中执行,会改变当前环境变量。

适用场景:

需修改当前 Shell 环境时(如加载环境变量、别名等)。


4. 普通变量(局部变量)和环境变量在作用域上有何本质区别?在编写运维脚本时,如何根据需求选择使用哪种变量?

普通变量:仅当前 Shell 有效;

环境变量:当前 Shell 及其子进程有效。

选择建议:

若需在子进程中使用的变量(如 PATH、JAVA_HOME)应设为环境变量(用 export)。



5.运维中常用的环境变量有哪些(至少列举3个)?如何临时设置一个环境变量使其在当前 Shell 及子 Shell中生效?

常用环境变量:PATH、HOME、USER。

设置方法:export VAR_NAME=value



6.位置变量$1、$2、$0、$#、$?、$$在运维脚本中分别用于获取什么信息?请各举一个实际使用场景。

$1、$2:第1、2个参数;

$0:脚本名;

$#:参数个数;

$?:上一条命令的退出状态;

$$:当前进程 PID。

使用场景:

$1 用于接收文件名;

$? 用于判断命令是否成功。


7.在处理脚本参数时,$*和$@的行为有何不同?为什么运维中遍历参数时更推荐使用$@?

$* 将所有参数视为一个字符串;

$@ 将每个参数视为独立字符串。

推荐 $@:

便于遍历参数,避免空格引起的误解。



8.给Shell变量命名时需要遵守哪些基本规则?

由字母、数字、下划线组成;

不能以数字开头;

不能使用关键字(如 if、for)。



9.变量赋值时,单引号"和双引号""对变量引用的处理有何不同?运维中拼接包含变量的路径时应优先用哪种引号?

单引号:不解析变量;

双引号:解析变量。

路径拼接推荐用双引号,如:"${DIR}/file"。



10.在运维脚本中,如何快速获取一个字符串的长度?请写出具体方法,

${#string}


11.如何将两个变量的字符串内容拼接成一个新字符串?举一个运维中常见的拼接场景(如路径拼接)。

str3="${str1}${str2}"



12.简述$(string;start:length)在运维中的实际用途,比如如何从IP地址中截取网段部分。

用于截取子字符串。

例如从 192.168.1.10 中截取网段 192.168.1

${IP:0:10}


13. Shell 支持哪些常用的算术运算符?运维中如何处理浮点数计算需求?

运算符:+ - * / % **

浮点数计算需借助 bc 或 awk,如:

echo "scale=2; 10/3" | bc



14. 运维脚本中实现整数运算的常用方式有哪些(至少3种)?请分别举例。

let sum=1+2

sum=$((1+2))

sum=$[1+2]



15.什么是退出状态码?$?的含义是什么?运维脚本中如何利用$?判断上一条命令是否执行成功?

$? 表示上一条命令的退出状态(0 成功,非0 失败)。

示例:

command

if [ $? -eq 0 ]; then

  echo "Success"

fi


16. 运维脚本中如何通过exit命令自定义退出状态码?

使用 exit n,如:exit 1



17.bash-x script.sh在脚本调试中起到什么作用?运维中何时需要使用这个命令?

用于调试脚本,显示每行命令及其执行结果。

适用于脚本逻辑错误或变量赋值问题时。


18.执行脚本时,子 Shell 环境与当前 Shell 环境有何隔离性?这对脚本中变量的生效范围有什么影响?

子 Shell 中定义的变量不会影响父 Shell,环境变量除外。



19.运维中如何删除一个已定义的变量?删除变量后,再次引用该变量会出现什么结果?

使用 unset var_name,删除后引用值为空。


20. Shell 中如何定义一个数组?

arr=(value1 value2 value3)


21.条件表达式中,-f、-d运算符分别用于判断文件的什么属性?请写出“判断 /var/log/messages 是普通文件且存在”的条件表达式。

-f:判断是否为普通文件;

-d:判断是否为目录。

条件表达式:[ -f "/var/log/messages" ]


22. 数值比较类条件运算符-eq、-ne、-gt、-It 分别表示什么含义?若要判断变量 disk_usage(存储磁盘使用率如85)大于80,对应的条件表达式是什么?

-eq:等于;-ne:不等于;-gt:大于;-lt:小于。
条件表达式:[ $disk_usage -gt 80 ]


23.cmd1 && cmd2 || cmd3 的执行逻辑是什么?请举例说明如何用该组合实现“备份文件成功则删除原文件,失败则输出错误信息”。

若 cmd1 成功则执行 cmd2,否则执行 cmd3。

示例:cp file.txt backup/ && rm file.txt || echo "Backup failed"


24.用awk处理/etc/passwd文件(格式:root:x:0:0:root:/root:/bin/bash)时,需提取"UID大于1000且登录Shell为/bin/bash”的用户名(第一字段)。

awk -F: '$3 > 1000 && $7 == "/bin/bash" {print $1}' /etc/passwd


25. 从/var/log/messages中提取所有“包含error或warn(不区分大小写)的日志杀目,并统计有多少条?请写出命令,


grep -iE "error|warn" /var/log/messages | wc -l

二、Shell脚本编程题(5道,每题5分)

1.编写一个脚本,接收用户输入的两个整数,计算并输出它们的和、差、积、商(取整数)。

脚本思路:

接收两个参数,分别用 $1 和 $2 表示,使用 expr 或 $(()) 进行计算。

#!/bin/bashecho "和: $(($1 + $2))"echo "差: $(($1 - $2))"echo "积: $(($1 * $2))"echo "商: $(($1 / $2))"

2.编写一个脚本,判断用户输入的文件是否存在,若存在则输出文件类型(普通文件、目录等),若不存在则提示“文件不存在”。


脚本思路:

使用 -f 判断普通文件,-d 判断目录。

#!/bin/bashif [ -f "$1" ]; thenecho "普通文件"elif [ -d "$1" ]; thenecho "目录"elseecho "文件不存在"fi

3.编写一个脚本,批量创建10个用户(user1到user10),并设置初始密码为123456,创建完成后提示“用户创建完成”。


脚本思路:

使用 for 循环创建用户,useradd 添加用户,echo "123456" | passwd --stdin 设置密码。

#!/bin/bashfor i in {1..10}; douseradd user$iecho "123456" | passwd --stdin user$idoneecho "用户创建完成"

4.编写一个脚本,统计指定目录下普通文件的数量,并输出文件名包含“log”的文件列表。


脚本思路:

使用 find 查找普通文件并计数,再用 grep 过滤含 “log” 的文件。

#!/bin/bashcount=$(find $1 -type f | wc -l)echo "普通文件数量: $count"echo "含 log 的文件:"find $1 -type f -name "*log*"

5.编写一个脚本,计算1到100之间所有偶数的和。

脚本思路:

使用 for 循环遍历1到100,用 if 判断偶数并累加。

#!/bin/bashsum=0for i in {1..100}; doif [ $((i % 2)) -eq 0 ]; thensum=$((sum + i))fidoneecho "偶数和: $sum"


文章转载自:

http://boEMYkMV.mxrrg.cn
http://sYx4oXmV.mxrrg.cn
http://ixz08Pt9.mxrrg.cn
http://nsOvpu3D.mxrrg.cn
http://qK31Xibd.mxrrg.cn
http://AZCyG9Wy.mxrrg.cn
http://QUSz7bRE.mxrrg.cn
http://YDEGe8br.mxrrg.cn
http://UMTKVgLj.mxrrg.cn
http://Nc09jXGS.mxrrg.cn
http://UFhv9XA2.mxrrg.cn
http://OWYQWba7.mxrrg.cn
http://ncAw7Fkz.mxrrg.cn
http://xtnGREs3.mxrrg.cn
http://ah38EBVI.mxrrg.cn
http://Jd7vp9Ji.mxrrg.cn
http://khn2p2sv.mxrrg.cn
http://BIzmSm4b.mxrrg.cn
http://zmxwtq0Q.mxrrg.cn
http://hzVSwG37.mxrrg.cn
http://xJ3niwjV.mxrrg.cn
http://DzZElZXt.mxrrg.cn
http://T6Xego0v.mxrrg.cn
http://ahRyVxyX.mxrrg.cn
http://61wSWRaY.mxrrg.cn
http://HPGoOyog.mxrrg.cn
http://zPSYBYgI.mxrrg.cn
http://qAkY6ghH.mxrrg.cn
http://hmwI1F3t.mxrrg.cn
http://9GpshsQT.mxrrg.cn
http://www.dtcms.com/a/377520.html

相关文章:

  • 广东省省考备考(第九十六天9.10)——言语(刷题巩固第二节课)
  • Pthread定时锁与读写锁详解
  • Go模块自动导入教学文档
  • 技术文章大纲:开学季干货——知识梳理与经验分享
  • TensorFlow平台介绍
  • Vue3 中实现按钮级权限控制的最佳实践:从指令到组件的完整方案
  • 生成模型与概率分布基础
  • Cookie之domain
  • JavaSSM框架-MyBatis 框架(五)
  • 中州养老:设备管理介绍
  • 【Day 51|52 】Linux-tomcat
  • MySQL - 如果没有事务还要锁吗?
  • “高德点评”上线,阿里再战本地生活
  • JUC的常见类、多线程环境使用集合类
  • 《C++ 108好库》之1 chrono时间库和ctime库
  • C++篇(7)string类的模拟实现
  • 弱加密危害与修复方案详解
  • 【Linux】Linux常用指令合集
  • Android- Surface, SurfaceView, TextureView, SurfaceTexture 原理图解
  • 如何设计Agent 架构
  • MySQL主从不一致?DBA急救手册:14种高频坑点+3分钟定位+无损修复!
  • 拍我AI:PixVerse国内版,爱诗科技推出的AI视频生成平台
  • 3D柱状图--自定义柱子颜色与legend一致(Vue3)
  • LeetCode热题100--199. 二叉树的右视图--中等
  • Next系统学习(三)
  • Python深度学习:NumPy数组库
  • Django时区感知
  • PostgreSQL15——Java访问PostgreSQL
  • Shell 函数详解
  • 【系统分析师】第21章-论文:系统分析师论文写作要点(核心总结)