《Linux系统与网络管理》复习题库---shell编程题

1、shell 编程题:在根目录下有四个文件 m1.c,m2.c,m3.c,m4.c,用 Shell 编程,实现自动创建 m1,m2,m3,m4 四个目录,并将 m1.c,m2.c,m3.c,m4.c 四个文件分别剪贴到各自相应的目录下。

#!/bin/bash
# 创建四个目录 
mkdir m1 m2 m3 m4 
# 剪切文件到对应目录 
mv m1.c m1/ 
mv m2.c m2/ 
mv m3.c m3/ 
mv m4.c m4/ 
echo "文件剪切完成!"

注:Shell 脚本在执行时有两个格式上的要求:以 #!/bin/bash 开头、必须有可执行权限。 

2、shell 编程题:用 Shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下。

#!/bin/bashif [ $# -ne 1 ]; then# 检查参数数量是否正确echo "参数错误!请传入一个文件路径作为参数。"exit 1
fiif [ ! -e "$1" ]; then# 检查文件是否存在echo "文件 $1 不存在,请检查路径是否正确。"exit 1
fiif [ -c "$1" ]; then# 检查文件类型是否为字符设备文件cp "$1" /devecho "文件 $1 已成功拷贝到 /dev 目录下。"
elseecho "文件 $1 不是字符设备文件,无需拷贝。"
fi

注:$n  //n 为数字,$0 代表命令本身,$1-9 代表第 1 到第 9 个参数,10 以上的参数需要用大括号包含如 ${10}
        $*  //代表命令行中的所有参数,$* 将所有参数看成一个整体
        $@  //这个变量也可以代表命令行中的所有参数,不过 $@ 把每个参数区分对待
        $#  //代表命令行中所有参数的个数

        

        判断两个字符串

=  //相等

        判断两个整数

-lt  //小于
-le  //小于等于
-eq  //等于
-gt  //大于
-ge  //大于等于
-ne  //不等于

        按照文件权限进行判断

-r  //有读的权限
-w  //有写的权限
-x  //有执行的权限

        按照文件类型进行判断

-f  //文件存在并且是一个常规的文件
-e  //文件存在
-d  //文件存在并是一个目录

        if 语句的基本语法如下,需要注意 [ 条件判断式 ] 中括号与判断式之间必须有空格

#单分支
if [ 条件判断式 ]then代码
fi#多分支
if [ 条件判断式 ]then代码
elif [ 条件判断式 ]then代码
fi

3、shell 编程题:编写一个名为 del 的脚本程序,先检查所给文件是否存在。如果文件不存在,请给出提示;如果存在,完成对其的完整删除。

#!/bin/bash 
if [ $# -ne 1 ]; then # 检查参数数量是否正确 echo "参数错误!请传入一个文件路径作为参数。" exit 1 
fi 
if [ ! -e "$1" ]; then # 检查文件是否存在 echo "文件 $1 不存在,请检查路径是否正确。" exit 1 
fi 
rm -rf "$1" 
# 删除文件 
echo "文件 $1 已成功删除。"

4、shell 编程题:编写一个名为 copy 的脚本程序,格式 copy。如果 file1 不存在,请提示;如果 file2 不存在,创建它。

#!/bin/bashif [ $# -ne 2 ]; then# 检查参数数量是否正确echo "参数错误!请传入两个参数:源文件和目标文件。"exit 1
fiif [ ! -f "$1" ]; then# 检查源文件是否存在echo "源文件 $1 不存在,请检查路径是否正确。"exit 1
fiif [ ! -f "$2" ]; then# 检查目标文件是否存在,如果不存在则创建touch "$2"
ficp "$1" "$2"
# 复制源文件到目标文件
echo "文件已成功复制从 $1 到 $2。"

5、shell 编程题:编写一个名为 mul 的脚本程序,参数为一小于 10 的正整数。先检查参数是否符合要求。如果不符合要求,请给出提示;如果符合要求,分别输出其与 1 到 9 的乘积。

#!/bin/bashif [ "$1" -le 0 ] || [ "$1" -ge 10 ]; then# 检查参数是否存在且小于 10echo "参数错误!请输入一个小于 10 的正整数作为参数。"exit 1
finum="$1"
for i in {1..9}; do# 输出乘积结果mul=$((num * i))echo "$num x $i = $mul"
done

注:for 循环有两个基本语法,语法一: 

for 变量 in 值1 值2 值3...
do程序
done

语法二:

for((初始值;循环控制条件;变量变化))
do程序
done 

在定义变量时变量名称可以由字母、数字和下划线组成,但不能以数字开头;等号的两侧不能有空格;变量名称一般为大写。

将命令的返回值赋给变量时使用如下写法;

  • A=`data`,表示运行 ` ` 中的命令,并把结果返回给 A;
  • A=$(data),$() 相当于 ``。

在 Shell 编程中有各种运算操作,语法格式为 $((运算式)) 或 $[运算式] 或者 expr m + n;如果希望将 expr 的值赋给某个变量,使用 `` 即可。

6、shell 编程题:编写一个名为 check 的脚本程序,参数为一小于 100 的正整数。先检查参数是否符合要求。如果不符合要求,请给 出提示;如果符合要求,检查其是否为素数,并给出结果“This is a prime number”或“This is not a prime number”。

#!/bin/bashif [ $# -eq 0 ] || [ "$1" -ge 100 ] || [ "$1" -le 0 ]; then# 检查参数是否存在且小于 100echo "参数错误!请输入一个小于 100 的正整数作为参数。"exit 1
fiis_prime=true
for ((i=2; i<$1; ++i)); do# 判断该数是否为素数if (( $1 % $i == 0 )); thenis_prime=falsebreakfi
doneif $is_prime; then# 给出判断结果echo "This is a prime number."
elseecho "This is not a prime number."
fi

7、shell 编程题:编写一个名为 cubic 的脚本程序,参数为一小于 20 的正整数。先检查参数是否符合要求。如果不符合要求,请给 出提示;如果符合要求,输出从 1 到该正整数的立方值。

#!/bin/bashif [ $# -eq 0 ] || [ "$1" -gt 20 ]; then# 检查参数是否存在且小于 20echo "参数错误!请输入一个小于 20 的正整数作为参数。"exit 1
fifor ((i=1; i<=$1; i++)); do# 循环计算并输出立方值cubic=$((i * i * i))echo $cubic
done

8、shell 编程题:编写一个 shell 脚本,它使得能够显示下面序列的前 20 个数字。0,1,1,2,3,5,8,13…,前二个数字之和为第三个 数字,即著名的 Fibonacci 序列。

#!/bin/bashnum1=0
num2=1
# 初始化前两个数字
echo $num1
echo $num2
# 显示前两个数字for ((i=3; i<=20; i++)); do# 循环计算并显示后面的数字num=$((num1 + num2))# 计算当前数字echo $num# 显示当前数字num1=$num2num2=$num# 更新前两个数字,向前移动计算窗口
done

9、编写 shell 脚本,计算 1 到 10 的阶乘。

#!/bin/bashsum=1for num in {1..10..1}; dolet sum=$sum*$num
doneecho $sum

注:在Bash脚本中,for循环的条件语句最后可以选择性地添加分号。 

10、编写 shell 脚本,实现:输入一个文件名,判断其是否为普通文件。

#!/bin/bashecho "Enter a file name:"
read fileif [ -f $file ]; thenecho "File $file exists."
fi

注:在我们进行 Shell 编程的时候,有时候也需要跟控制台进行交互,比如用户动态的输入一些数据,这个时候就需要用到 read

基本语法为:read(选项)(参数)

  • -p 制定读取值时的提示符
  • -t 指定读取值时的等待时间,如果没有在规定时间内输入,则不再等待。

11、添加一个新组为 class1,然后添加属于这个组的 30 个用户,用户名的形式为 stdxx,其中 xx 从 01 到 30。

#!/bin/shi=1groupadd class1
while [ $i -le 30 ]
doif [ $i -le 9 ]; thenUSERNAME=stu0${i}elseUSERNAME=stu${i}fiuseradd $USERNAMEmkdir /home/$USERNAMEchown -R $USERNAME /home/$USERNAMEchgrp -R class1 /home/$USERNAMEi=`expr $i + 1`# 或 i=$(($i + 1)) 或 let "i=i+1"
done

注:while循环的格式:

while [ 条件判断式 ]
do
程序
done

12、编写 shell 程序,实现自动删除 50 个用户账号的功能。账号名为 stud1 至 stud50。

#!/bin/shi=1while [ $i -le 50 ]; douserdel -r stud$isum=`expr $i + 1`i=$sum
doneif [ $? -eq 0 ]; thenecho "remove successful!"
elseecho "remove failed!"
fi

13、下面给出了一个 SHELL 程序,按照其行后有#(n)形式的语句解释,补充程序,并执行程序

#!/bin/bash
#(1)使用/bin/bash 解释脚本
dir=$1
#(2)将位置变量 1 赋值给变量 dir
if [ -d $dir ]
#(3)如果 dir 所指为目录
thencd $dir#(4)将当前目录改为 dirfor file in *doif [ -f $file ]#(5)如果循环变量 file 所指是普通文件thencat $file#(6)显示文件 file 的内容echo "remove successful!"fidone
elseecho "bad directory name $dir"
fi

14、试编写一个 SHELL 程序,该程序能接收用户从键盘输入的 100 个整数,然后求出其总和、最大值及最小值。

#!/bin/sh
read max
min=$max
sum=$maxi=1
while [ $i -lt 100 ]
doread xsum=`expr $sum + $x`if [ $max -lt $x ]thenmax=$xfiif [ $x -lt $min ]thenmin=$xfii=`expr $i + 1`
done
echo "sum = $sum ; max = $max ; min = $min"

15、编写 1 个弹出式菜单的 shell 程序并实现其简单的菜单功能:即用户按下数字 1,则提示用户输入源和目的文件名后执行复制;输入数字 2, 则提示用户输入要更名的文件或目录后执行更名操作; 输入数字 3,则提示用户 输入要删除的文件并执行删除操作;输入数字 4,则提示用户输入要查找的文件 并执行查找操作;输入数字 5,则退出该菜单 shell 程序的执行。

#!/bin/sh
clear
while [ 0 ]; doecho "************************************************"echo " menu "echo " 1.copy "echo " 2.rename "echo " 3.remove "echo " 4.find "echo " 5.exit "echo "************************************************"echo -n "select: "read choicecase $choice in1)echo -n "source file: "read srcecho -n "destination folder: "read descp -arf $src $desif [ $? -eq 0 ]; thenecho "copy successful!"elseecho "copy failed"fi;;2)echo -n "the file to be renamed: "read srcecho -n "the new file: "read desmv $src $desif [ $? -eq 0 ]; thenecho "rename successful!"elseecho "rename failed"fi;;3)echo -n "the file to be removed: "read srcrm -rf $srcif [ $? -eq 0 ]; thenecho "remove successful!"elseecho "remove failed"fi;;4)echo -n "the file to be found: "read srcfind $HOME -name $src;;5)exit;;*)echo "Invalid option";;esac
done

注:case语法规则

case $变量名 in
"值1")
如果变量的值等于1,则执行程序1
;;
"值2")
如果变量的值等于2,则执行程序2
;;
......
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac 

16、用 Shell 编程,判断一文件是不是字符设备文件,如果是将其拷贝到/dev 目录下。 

#!/bin/bashFILENAME=$1
if [ -c "$FILENAME" ]; thencp "$FILENAME" /dev
fi

17、编写 shell 程序,实现自动删除 50 个账号的功能。账号名为 stud1 至 stud50。

#!/bin/shi=1while [ $i -le 50 ]; douserdel -r stud${i}i=$(($i+1))
done

18、某系统管理员需每天做一定的重复工作,请按照下列要求,编制一个解决方案:
(1)在下午 4:50 删除/abc 目录下的全部子目录和全部文件;
(2)从早 8:00~下午 6:00 每小时读取/xyz 目录下 x1 文件中每行第一个域的全部数据加入到/backup 目录下的 bak01.txt 文件内;
(3)每逢星期一下午 5:50 将/data 目录下的所有目录和文件归档并压缩为文件:backup.tar.gz; (4)在下午 5:55 将 IDE 接口的 CDROM 卸载(假设:CDROM 的设备名为 hdc);
(5)在早晨 8:00 前开机后启动。

#!/bin/bash # 1. 在下午 4:50 删除/abc 目录下的全部子目录和全部文件 
rm -rf /abc/* # 2. 从早 8:00~下午 6:00 每小时读取/xyz 目录下 x1 文件中每行第一个域的全部数据加入到/backup 目录下的 bak01.txt 文件内 
if [[ $(date +%H) -ge 8 && $(date +%H) -lt 18 ]]; then awk '{print $1}' /xyz/x1 >> /backup/bak01.txt 
fi # 3. 每逢星期一下午 5:50 将/data 目录下的所有目录和文件归档并压缩为文件:backup.tar.gz 
if [[ $(date +%u) -eq 1 && $(date +%H:%M) == "17:50" ]]; then tar -zcf /backup/backup.tar.gz /data/* 
fi # 4. 在下午 5:55 将 IDE 接口的 CDROM 卸载(假设:CDROM 的设备名为 hdc) 
if [[ $(date +%H:%M) == "17:55" ]]; then eject /dev/hdc 
fi 

将上述代码保存为一个名为 daily_tasks.sh 的文件,并赋予执行权限。然后,可以使用 crontab -e 命令编辑 cron 任务,并添加以下行到文件的末尾,以在早晨 8:00 前开机后启动脚本:

@reboot /path/to/daily_tasks.sh

请将 /path/to/daily_tasks.sh 替换为实际的脚本路径。 请注意,上述脚本中的时间判断是基于当前系统时间进行的。确保脚本和路径都正确,并有足够的权限执行所需的操作。

19、设计一个 Shell 程序,在/userdata 目录下建立 50 个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权限为: 读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

#!/bin/shi=1while [ $i -le 50 ]; doif [ -d /userdata ]; thenmkdir -p /userdata/user$ichmod 754 /userdata/user$iecho "user$i"i=$((i+1))elsemkdir /userdatamkdir -p /userdata/user$ichmod 754 /userdata/user$iecho "user$i"i=$((i+1))fi
done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587357.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go module本地包导入

go module本地包导入 本文目录 go module本地包导入启用go mod主项目工作目录本地module目录发布和使用模块 golang 1.11之后加入了go mod来替代GOPATH 官方文档参考&#xff1a;https://golang.google.cn/doc/tutorial/call-module-code 启用go mod 开启 Go modules # 临时开…

【谭浩强C程序设计精讲 5】运算符和表达式

文章目录 3.3 运算符和表达式3.3.1 C运算符3.3.2 基本的算术运算符3.3.3 自增&#xff08;&#xff09;、自减&#xff08;--&#xff09;运算符3.3.4 算术表达式和运算符的优先级与结合性3.3.5 不同类型数据间的混合运算3.3.6 强制类型转换运算符 3.3 运算符和表达式 3.3.1 C…

【Java】一文讲解Java类加载机制

Java 类加载机制是 Java 运行时的核心组成部分&#xff0c;负责在程序运行过程中动态加载和连接类文件&#xff0c;并将其转换为可执行代码。理解类加载机制&#xff0c;能更容易理解你一行行敲下的Java代码是如何在JVM虚拟机上运行起来。并且理解类加载机制之后&#xff0c;我…

DevOps持续交付之容器化CICD流水线

DevOps持续交付 随着DevOps⼤规模化的落地和应⽤&#xff0c;持续集成以及持续交付已经是⼀种常态的。CI指的是持续集成&#xff0c;使⽤的开源⼯具是Jenkins&#xff0c;CD指的是持续交付和持续部署&#xff0c;⼀个完整的软件开发⽣命周期为: 主要流程可以具体为: 构建阶段…

CA和证书

安全机制 墨菲定律 如果有两种选择&#xff0c;其中一种将导致灾难&#xff0c;则必定有人会作出这种选择。即&#xff1a;做事不要有侥幸心理。 常用安全技术 认证、授权、审计、安全通信 加密算法和协议 对称加密算法 加密和解密使用同一个秘钥。 特性 加密、解密使…

Python+OpenCV 零基础学习笔记(1-3):anaconda+vscode+jupyter环境配置

文章目录 前言相关链接环境配置&#xff1a;AnacondaPython配置OpenCVOpencv-contrib:Opencv扩展 Notebook:python代码笔记vscode配置配置AnacondaJupyter文件导出 前言 作为一个C# 上位机&#xff0c;我认为上位机的终点就是机器视觉运动控制。最近学了会Halcon发现机器视觉还…

修改css、html后前端没有刷新的解决方法(图文)

修改css、html后前端没有刷新的解决方法&#xff08;图文&#xff09; 修改css、html后前端没有刷新的原因和图文解决方法 1 原因 网页的缓存机制 2 解决方法 禁用网页缓存&#xff0c;具体操作如下 打开F12网络选项勾选禁用缓存。此时再刷新页面即可实时更新 以上就是全…

元旦档首日票房超4.69亿,“下雪场尴尬”上热搜!

哇塞&#xff0c;元旦假期终于来啦&#xff01;&#x1f389;在这个喜庆的时刻&#xff0c;电影院也热闹非凡&#xff0c;据猫眼专业版数据显示&#xff0c;截至12月30日&#xff0c;2023年元旦档首日票房竟然超过了4.69亿&#xff01;这简直是个天文数字啊&#xff01;&#x…

C++:stack、queue、priority_queue增删查改模拟实现、deque底层原理

C:stack、queue、priority_queue增删查改模拟实现 前言一、Cstack的介绍和使用1.1 引言1.2 satck模拟实现 二、Cqueue的介绍和使用2.1 引言2.2 queue增删查改模拟实现 三、STL标准库中stack和queue的底层结构:deque3.1 deque的简单介绍(了解)3.2 deque的缺陷3.3 为什么选择dequ…

【2023 —— 我和CSDN相遇的第一年】— “技术学习和个人成长的回顾与展望”

​ ​ &#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 &#x1f38a;对2023的总结与回顾&#x1f38a; &#x1f3c5;获奖记录 &#x1f4da;学…

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释

SpringBoot实用篇

SpringBoot实用篇 1、热部署 什么是热部署&#xff1f; 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。对于Java应用程序来说&#xff0c;热部署就是在运行时更新Java类文件。 热部署有什么用&#xff1f; 节约时间&#xff0c;热…

OpenGL FXAA抗锯齿算法(Qt)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前已经提供了使用VCG读取Mesh的方式,接下来就需要针对读取的网格数据进行一些渲染操作了。在绘制Mesh数据时总会遇到图形的抗锯齿问题,OpenGL本身已经为我们提供了一种MSAA技术,但该技术对于一些实时渲染性能有…

【STM32】SPI通信

1 SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是由Motorola公司开发的一种通用数据总线 四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff0c;串行时钟&#xff09;、MOSI&#xff08;Master Output Slave Input&am…

模型 KANO卡诺模型

本系列文章 主要是 分享 思维模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。需求分析。 1 卡诺模型的应用 1.1 餐厅需求分析故事 假设你经营一家餐厅&#xff0c;你想了解客户对你的服务质量的满意度。你可以使用卡诺模型来收集客户的反馈&#xff0c;并分析客户的…

微信小程序开发系列-09自定义组件样式特性

微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…

快速找回误删的文件:2024 年顶级数据恢复软件大盘点

你曾经遇到过数据丢失的问题吗&#xff1f;别担心&#xff0c;12个最佳数据恢复软件帮你恢复。 计算机中的数据恢复是从辅助存储、丢失的文件或介质中恢复已删除、不可恢复、损坏、损坏和格式化的数据的过程。存储的数据可以通过正常方式带回到同一个地方&#xff0c;甚至&…

模版匹配历劫之路2-探究空间金字塔对于匹配速度的影响

1 方法一 在合适的金字塔层数上&#xff0c;低步长旋转角度&#xff0c;逐层缩小旋转范围&#xff0c;达到提高匹配速度的效果 金字塔越高&#xff0c;模版越模糊&#xff0c;但是只要模版不会被降级很严重&#xff0c;那么模版的边缘方向不会受到太大的影响。高层级别的金字塔…

简单的springboot项目

传参方式 URL 传参 URL 传参的两种常见方式是通过查询参数和路径参数。 查询参数&#xff1a; 查询参数是通过在 URL 后面使用 ? 字符&#xff0c;然后以 keyvalue 的形式添加到 URL 中。多个查询参数之间使用 & 符号分隔。例如&#xff1a;https://example.com/api?…

【网络安全 | Misc】normal_png

方法一 可以通过stegsolve或winhex看到图片高度被改写&#xff1a; 改为&#xff1a; 再保存图片即可&#xff1a; flag{B8B68DD7007B1E406F3DF624440D31E0}方法二 使用脚本查看宽高是否被修改&#xff1a; import zlib import struct import argparse import itertoolspars…