shell脚本小练习#002:通过shell脚本创建目录

实例1:

# 编写一个shell脚本实现以下需求:

# 执行脚本,当前目录下创建一个名为test的目录,

# 然后在新建的test目录下创建3个文件夹分别命名为case1~case3,在每个文件下创建一个log.txt文件


# 编写一个shell脚本实现以下需求:
# 执行脚本,当前目录下创建一个名为test的目录,
# 然后在新建的test目录下创建3个文件夹分别命名为case1~case3,在每个文件下创建一个log.txt文件# 需要注意的是,这个脚本使用了相对路径,因此必须从脚本所在的目录中执行。
# 如果要在其他目录中执行,可能需要使用绝对路径或者调整代码。
# 此外,如果目录或文件已存在,会报错。
# 因此在实际应用中可能需要加上一些错误处理的逻辑,以确保程序能够正常执行。#!/bin/bash
# 这个脚本可以分为三个部分:
# 1.判断 test 目录是否存在,如果存在则删除
if [ -d "test" ]; thenrm -rf testecho "delete dir test"echo
fi# 2. 在当前目录下创建 `test` 目录。
echo "create dir test"
mkdir test# 3. 使用 `for` 循环语句创建 `case1`、`case2`、`case3` 三个目录,并在每个目录下创建一个 `log.txt` 文件。
# - `for i in {1..3}; do ... done` 表示循环 3 次,每次循环的 `i` 取值为 `1`、`2`、`3`。
# - `mkdir test/case$i` 表示在 `test` 目录下创建名为 `case1`、`case2`、`case3` 的目录。
# - `touch test/case$i/log.txt` 表示在 `case1`、`case2`、`case3` 目录下创建名为 `log.txt` 的文件。
for i in {1..3}; domkdir test/case$itouch test/case$i/log.txt
done

实例2: 通过函数的形式实现文件目录创建,并通过对函数输入参数设置创建问价目录的个数

# 通过函数的形式实现文件目录创建,并通过对函数输入参数设置创建问价目录的个数#!/bin/bash
# 创建 test 目录和子目录
function create_test_dir() {# `local` 命令可以声明局部变量# `local num=$1` 的意思是将传入 `create_test_dir` 函数的第一个参数(即常见文件目录 case 的个数)赋值给局部变量 `num`。# 这个变量只在这个函数中有效,在函数外无法访问。# 使用局部变量可以避免命名冲突,提高代码的可维护性和可读性。# 需要注意的是,`local` 命令是 Bash 内置的命令,不是所有的 shell 都支持。local num=$1# `-d` 是一种测试条件,用于判断给定的路径是否是一个目录(directory)# 如果当前目录中存在名为 `test` 的目录,则执行 `then` 后面的删除命令。# 如果 `test` 目录不存在,则不执行 `then` 后面的删除命令。if [ -d "test" ]; thenrm -rf testecho "delete dir test"fiecho "create dir test"mkdir test# `seq` 是一个用于生成序列的命令,`seq 1 $num` 的意思是生成从 1 到 `$num` 的数字序列,用空格隔开。# 例如,如果 `$num` 为 3,那么 `$(seq 1 $num)` 的结果就是 `1 2 3`。# `for i in $(seq 1 $num); do` 表示 for 循环,# 将 `$(seq 1 $num)` 的结果分别赋值给变量 `i`,循环执行接下来的语句,直到序列中的所有数字都被处理完。for i in $(seq 1 $num); domkdir test/case$itouch test/case$i/log.txtdone
}# 主函数
function main()
{local num_case=5create_test_dir $num_case
}# 调用主函数
main

实例3:通过输入参数的形式指定创建目录以及文件个数

# 通过命令行的形式输入参数,设置创建文件目录以及文件个数
# 不需要输出提示信息,直接执行脚本时输入参数即可:#!/bin/bash
function create_test_dir() {local num=$1if [ -d "test" ]; thenrm -rf testfimkdir test    for i in $(seq 1 $num); domkdir test/case$itouch test/case$i/log.txtdone
}function main()
{# `$1` 是外部调用`main` 函数中传递的第一个参数,并将其传递给 `create_test_dir` 函数作为其第1个参数,create_test_dir $1
}# 在这个例子中,`"$@"` 表示将所有从命令行输入的参数传递给 `main` 函数。
# 具体来说,当我们在执行脚本时在命令后面加上参数时,这些参数都会被传递给 `$@` 数组变量。
# `"$@"` 可以将数组中的所有元素拆分成一个个字符串,并将它们作为单独的参数传递给函数。
# 因此,在本例中,`"$@"` 将所有命令行输入的参数作为 `$1, $2, $3` 等参数传递给 `main` 函数,
# 并确保 `main` 函数可以将这些命令行输入的参数传递给 `create_test_dir` 函数,以便正确地执行脚本中需要的计算任务。
# 换句话说,`"$@"` 是一个特殊的变量,它帮助我们捕获并处理在运行脚本时传递给脚本的任何输入参数。
# 在这个例子中,使用 `"$@"` 可以确保我们可以在执行脚本时传递给脚本任意数量的参数,并将它们正确地传递到函数中去,以便执行特定任务或任务流程。main "$@"

实例4:通过提示信息输入参数,根据参数创建目录以及文件个数

# 通过命令行的形式输入参数,设置创建文件目录以及文件个数
# 通过提示信息输入参数#!/bin/bash
function create_test_dir() {    if [ -d "test" ]; thenrm -rf testecho "delete dir test"fiecho "create dir test"mkdir test    for i in $(seq 1 $1); domkdir test/case$itouch test/case$i/log.txtdone
}function main()
{# `read` 命令用于从标准输入中读取数据,并将输入的数据赋值给变量。# `-p` 参数用于在等待输入时向标准输出打印提示信息。# 用户输入的内容会被赋值给变量 `num`。# 在这里,`-p` 参数会向标准输出打印提示信息 `"Enter the number of test cases: "`。# 也就是说,用户需要按照提示,输入他们期望创建的测试用例的数量。# 然后,`$num` 被传递给 `create_test_dir` 函数,执行创建指定数量的测试用例和测试用例文件的任务。# 因此,这段代码中,`read -p` 命令用于获取用户输入,并且将输入赋值给变量。# 注意提示信息中"num"要与参数$num同名read -p "Enter the number of test cases: " numcreate_test_dir $num
}main

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

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

相关文章

AI开发-深度学习框架-PyTorch-torchnlp

1 需求 Welcome to Pytorch-NLP’s documentation! — PyTorch-NLP 0.5.0 documentation 2 接口 3 示例 4 参考资料

基于Java Springboot宠物服务中心微信小程序

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 微信…

算法妙妙屋-------1.递归的深邃回响:全排列的奇妙组合

全排列的简要总结 全排列(Permutation)是数学中一个经典的问题,指的是从一组元素中,将所有元素按任意顺序排列形成的所有可能序列。 特点 输入条件: 给定一组互异的元素(通常为数组或字符串)。…

内网穿透步骤

步骤 第一次需要验证token window和linux的方法不同。 然后 启动 cpolar 服务: 在命令窗口中输入 cpolar.exe htttp 8080,启动内网穿透服务。确保命令窗口保持开启状态,以维持穿透效果。 cpolar.exe hhttp 8080 成功后 注意事项 命令窗口…

房屋结构安全监测系统守护房屋安全卫士

一、系统背景 随着时间的流逝,建筑物的主体结构、设备设施等会因为自然老化、材料疲劳、使用环境的变化以及维护不当等各种因素的影响,逐渐出现性能下降甚至安全隐患。因此,进行房屋安全监测显得尤为重要。房屋结构安全是指建筑物的结构体系在…

直击高频编程考点:聚焦新版综合编程能力考查汇总

目录 一、业务性编程和广度能力考查 (一)基本定义 (二)必要性分析 二、高频考查样题(编程扩展问法) 考题1: 用java 代码实现一个死锁用例,说说怎么解决死锁问题?(高…

架构05-架构安全性

零、文章目录 架构05-架构安全性 1、软件架构安全的重要性 **系统安全:**不仅包括防御黑客攻击,还包括安全备份与恢复、安全审计、防治病毒等。**关注重点:**认证、授权、凭证、保密、传输安全、验证。 2、认证(Authenticatio…

【人工智能】用Python和Scikit-learn构建集成学习模型:提升分类性能

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 集成学习(Ensemble Learning)是通过组合多个弱学习器提升模型性能的机器学习方法,广泛应用于分类、回归及其他复杂任务中。随机森林(Random Forest)和梯度提升(Gradient Boosting)是集成学习的两种…

鲲鹏麒麟安装离线版MySQL5.7

最近有项目需求,需要在鲲鹏ARM服务器上安装数据库MySQL5.7,服务器为鲲鹏920,操作系统Kylin Linux Advanced Server release V10 (Tercel) 安装包 下载地址:https://cloud.189.cn/t/JRVnmeEvMRZ3(访问码:t…

4399大数据面试题及参考答案(数据分析和数据开发)

对数据分析的理解 数据分析是一个从数据中提取有价值信息以支持决策的过程。它涵盖了数据收集、清洗、转换、建模和可视化等多个环节。 首先,数据收集是基础。这包括从各种数据源获取数据,例如数据库、文件系统、网络接口等。这些数据源可以是结构化的数…

封装类与封装函数

目录结构 src/ ├── utils/ │ ├── test.js │ ├── Calculator.js ├── views/ │ ├── Home.vue ├── App.vue 共同点:模块导出与模块引入 封装函数 场景 简单、轻量级和性能敏感的场景,适合快速开发和维护。 优 可维护性&…

【Bug】el-date-picker组件时间差

这个组件默认是国际标准时间 2024-11-27T07:56:37.000Z 表示的是 UTC 时间。如果你当前所在的时区是 UTC8(例如中国),那么这个时间实际上是比你选择的时间早 8 个小时 T表示分隔符,Z表示的是UTC 解决:给el-date-pic…

【STM32学习】TB6612FNG驱动芯片的学习,驱动电路的学习

目录 1、TB6612电机驱动芯片 1.1如下是芯片的引脚图: 1.2如下图是电机的控制逻辑: 1.3MOS管运转逻辑 1.3典型应用电路 2、H桥驱动电路 2.1、单极模式 2.2、双极模式 2.3、高低端MOS管导通条件 2.4、H桥电路设计 2.5、自举电路 3、电气特性 3…

Qt | TCP服务器实现QTcpServer,使用线程管理客户端套接字

点击上方"蓝字"关注我们 01、QTcpServer >>> QTcpServer 是 Qt 网络模块中的一个类,用于实现TCP服务器。它允许创建一个服务器,可以接受来自客户端的连接。QTcpServer 是事件驱动的,这意味着它将通过信号和槽机制处理网络事件。 常用函数 构造函数: QT…

Level DB --- Arena

class Arena 是Level DB中的重要数据结构,它是一个简易的内存池管理类。 内存资源管理模型 Level DB 内存管理模型如图1所示,在内存分配上,Level DB每次预先申请KBlock大小的资源,新分配的内存请求会预先在last KBlocak的资源上…

Rsa加解密 + 签名验签

Rsa加解密 概述聚合算法名称(用于创建加密器)基本概念填充方式分块加密 基本使用生成密钥加解密创建加密器设置模式(加密)、公钥对明文加密,并对结果进行Base64编码对以上结果,进行解密 设置模式&#xff0…

docker安装seata

1.准备数据库表 -- the table to store GlobalSession data CREATE TABLE IF NOT EXISTS global_table (xid VARCHAR(128) NOT NULL,transaction_id BIGINT,status TINYINT NOT NULL,application_id VARC…

达梦数据库常用指令都是工作中常用的

达梦数据库连接配置文件名称 cd /etc/dm_svc.conf查询 sql 日志记录是否开启:0 关闭,1/2/3开启); select SF_GET_PARA_VALUE(1,SVR_LOG)union ALL select SF_GET_PARA_VALUE(2,SVR_LOG);关闭 sql 日志记录功能 call SP_SET_PARA_VALUE(1,SVR_LOG,0);开…

大语言模型---Dropout 的定义;Dropout 减少过拟合的原因;Dropout 的实现

文章目录 1. Dropout 的定义2. Dropout 减少过拟合的原因3. Dropout 的实现 1. Dropout 的定义 Dropout 是一种简单而有效的正则化技术,通过在每次训练迭代中随机丢弃(即屏蔽)一部分神经元,强制模型在没有某些特定神经元参与的情…

MVC core 传值session

MVC Entity Framework MVC Core session 》》 需要添加 Session 服务 和 Session中间件 builder.Services.AddSession(); app.UseSession(); 》》》控制器中 public IActionResult Privacy(){HttpContext.Session.SetString("key", "123");return View(…