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

实验七 shell程序设计

实验七 shell程序设计

一、实验目的

理解shell的工作原理,学会编写shell脚本。

二、实验内容

1.编写不同功能的脚本程序。
2.利用chmod修改文件权限。
3.掌握脚本文件执行的方法。

三、主要实验步骤

1.创建一个名为zs_lab7的目录,下边实验步骤都在该目录下完成。
编写 lhn2025 脚本:nano lhn2025

在这里插入图片描述

2.创建一个名为zs2025的脚本,一旦运行该脚本,将清除屏幕,随后输出脚本程序功能信息,并提示和等待用户按任意键继续执行,每次执行会将当前用户名称、日期和时间追加到当前目录下的子目录AA的文件aa中(如果目录AA和文件aa不存在,则脚本应该可以检测并创建它们),每次执行完毕提示用户是否继续执行追加信息,按Y继续,按N结束脚本。

创建实验目录
mkdir -p ~/lhn_lab7cd ~/lhn_lab7

编写 lhn2025 脚本

nano lhn2025

粘贴以下内容:

#!/bin/bash
clearecho "LHN2025 Script"read -p "Press any key to continue..."date >> ~/lhn_lab7/AA/aa.txtwhile true; doread -p "Continue? (Y/N): " choicecase $choice in[Yy]* ) date >> ~/lhn_lab7/AA/aa.txt ;;[Nn]* ) exit ;;* ) echo "Invalid input" ;;esacdone

保存并退出(Ctrl+O, Ctrl+X)
设置执行权限
chmod +x lhn2025

创建测试目录和文件

mkdir -p AAtouch AA/aa.txt

在这里插入图片描述

3.创建一个名为zs1(你姓名拼音第一个字母的缩写,如张三的文件为zs1,下边步骤以此类推,只要是zs通通改为你本人姓名相应的形式)的脚本文件,能实现如下功能并运行该脚本。
A.清屏。
B.空两行,然后程序暂停15秒。
C.显示当前系统内核版本信息、日期和时间。
D.显示当前系统内存使用情况。
E.让计算机发出一小会蜂鸣声。
F.检查当前目录下是否有名为CPP的目录,若没有则创建一个。
G.将当前目录下所有文件和目录信息保存到一个新文件zs中。
H.白底黑字在屏幕中部位置显示信息“Hi,Zhang-San”。
I.提示按任意键关闭显示属性,并输出“Bye…”。

lhn1 脚本关键部分
bash
#!/bin/bash
clear
sleep 15
uname -r
date
free -h
echo -e '\a'
mkdir -p CPP
ls -la > lhn.txt

在这里插入图片描述

在这里插入图片描述

4.编写zs2A脚本,使之能够计算从键盘输入的3个整数的最小值,输入前应该有信息提示,输入后应该有整数(允许整数为负数,如-3、-82等)的验证,如果输入的不是整数则要求重新输入。

lhn2A 脚本验证输入while true; doread -p "Enter integer: " numif [[ $num =~ ^-?[0-9]+$ ]]; thenbreakelseecho "Invalid integer"fidone

在这里插入图片描述

5.编写zs2B脚本,使之能从命令行接收参数,比如输入命令zs2B 12 55 zebra 37,程序运行显示整数参数中最大的一个:the largest number is : 55。

lhn2B 脚本处理参数

max=0for arg in "$@"; doif [[ $arg =~ ^[0-9]+$ ]]; thenif (( arg > max )); thenmax=$argfifidoneecho "Largest: $max"

在这里插入图片描述

6.利用for循环、while循环或until循环编写脚本zs3,对命令行传给它的数字参数求和并显示结果。比如输入命令zs3 10 20 30 40,那么输出结果:10+20+30+40=100,注意参数的个数不限。

在这里插入图片描述

四、思考题

1.在shell中,之前的课程里讲过用()编组命令,请问使用{命令1;命令2; … }和(命令1; 命令2; …)两种方式差别在哪,做实验验证下。

答:编组命令区别
{cmd1; cmd2;} 在当前 shell 执行
( cmd1; cmd2; ) 在子 shell 执行

验证方法:

2.系统变量 ∗ 和 *和 @分别代表什么含义,区别是什么?举例说明下。

答:系统变量区别
$* 将所有参数视为单个字符串
@ 保留每个参数的独立性示例: a r g s = " a b " f o r i i n " @ 保留每个参数的独立性 示例: args="a b" for i in " @保留每个参数的独立性示例:args="ab"foriin"*“; do echo KaTeX parse error: Expected 'EOF', got '#' at position 10: i; done #̲ 输出 "a b" for i…@”; do echo $i; done # 输出 a 和 b

1. 新建一个脚本文件
在终端里使用 nano 或者 vim 编辑器来创建一个新的脚本文件,就叫 test_params.sh 吧。2. 编写脚本内容
把下面的代码复制粘贴到 test_params.sh 文件中。
bash
#!/bin/bash

设置参数

args="a b"

定义函数来测试 $*

test_star() {echo "使用 \$* 的结果:"for i in "$*"; doecho $idone
}

定义函数来测试 $@

test_at() {echo "使用 \$@ 的结果:"for i in "$@"; doecho $idone
}

调用测试函数

test_star $args
test_at $args
http://www.xdnf.cn/news/71281.html

相关文章:

  • python生成动态库在c++中调用
  • 【JavaEE】计算机的工作原理
  • 乐家桌面纯净版刷机ROM下载 乐家桌面纯净版2025官方最新下载
  • 会话跟踪技术:让我们更懂用户
  • 使用stream进行列表循环和直接forEach循环的差异及使用场景
  • 环形缓冲区容量耗尽解决方案
  • 如何判断设备是否支持带电插拔——从原理到实操的全面解析
  • C# 运算符:?.(null 条件运算符)和 ??(null 合并运算符)
  • AI技术驱动SEO关键词策略革新
  • 接口测试流程和步骤
  • 基于SA模拟退火算法的车间调度优化matlab仿真,输出甘特图和优化收敛曲线
  • 【Andorid备案获取keystore里面的公钥和SHA-1码等等】
  • Linux——入门常用基础指令
  • 前端通过jenkins和docker打包部署流程
  • 爬虫获取sku信息需要哪些库
  • 入门-C编程基础部分:16、 预处理器
  • 如何动态调整Python爬虫的Request请求延迟
  • Java写数据结构:栈
  • MySQL《事务》
  • ts中的类型
  • 【EasyPan】application.properties配置文件解析
  • 企业常见漏洞类型
  • 《浔川代码编辑器v2.0内测(完整)报告》
  • 创新项目实训开发日志3
  • 深度剖析d3dx9_42.dll错误:从原理到解决d3dx9_42.dll丢失方案
  • 总结设计测试用例的万能公式
  • 企业微信-自建应用
  • opencv 对图片的操作
  • c++学习之---vector
  • 华为认证HCIE考试费用总结