shell 脚本的编写学习
学习编写 Shell 脚本是 Linux/Unix 系统管理和自动化的一个非常有用的技能。Shell 脚本是一些 Shell 命令的集合,用户可以用它来自动执行任务、简化工作流程、管理系统等。下面是一个 Shell 脚本学习的入门指南:
1. Shell 脚本基础
Shell 脚本通常是以 .sh 为扩展名的文本文件。你可以通过任何文本编辑器(如 vim、nano、gedit 等)创建 Shell 脚本文件。
2. 脚本的结构
一个基本的 Shell 脚本结构包括:
- Shebang:定义解释器的路径,通常是脚本的第一行。
#!/bin/bash
这个 #!/bin/bash 告诉系统使用 bash 解释器来执行这个脚本。
- 命令:之后是一些实际执行的命令。比如:
echo "Hello, World!"
3. Shell 脚本示例
示例 1: 输出文本
#!/bin/bash
echo "Hello, World!"
执行方法:
- 保存文件为 hello.sh。
- 给脚本赋执行权限:chmod +x hello.sh。
- 执行脚本:./hello.sh。
示例 2: 使用变量
#!/bin/bash
name="Alice"
echo "Hello, $name!"
在这个例子中,我们定义了一个变量 name,然后通过 $name 来访问变量。
示例 3: 使用条件语句
#!/bin/bash
age=20if [ $age -ge 18 ]; thenecho "You are an adult."
elseecho "You are a minor."
fi
这个脚本通过 if 判断 age 是否大于等于 18,输出相应的结果。
示例 4: 循环结构
#!/bin/bash
for i in {1..5}
doecho "Number $i"
done
这个脚本通过 if 判断 age 是否大于等于 18,输出相应的结果。
示例 4: 循环结构
#!/bin/bash
for i in {1..5}
doecho "Number $i"
done
这个脚本会打印数字 1 到 5。
示例 5: 函数定义
#!/bin/bash
greet() {echo "Hello, \$1!"
}
greet Alice
greet Bob
这里我们定义了一个函数 greet,并传递了一个参数 $1(第一个参数)。
4. 常用命令
- echo:打印输出信息
- read:读取用户输入
- if:条件判断
- for/while:循环
- exit:退出脚本
- $1, $2, …:脚本传递给脚本的参数
- $?:上一个命令的退出状态(0 表示成功,非零表示失败)
5. 错误处理
Shell 脚本的错误处理可以通过检查命令的退出状态码 $? 来完成。例如:
#!/bin/bash
cp file1.txt file2.txt
if [ $? -eq 0 ]; thenecho "File copied successfully."
elseecho "Error occurred during file copy."
fi
6. 脚本中的参数
Shell 脚本接受命令行参数,可以通过 $1, $2, … 来访问它们,KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ 获取参数的个数,@ 获取所有参数。
#!/bin/bash
echo "The first argument is: \$1"
echo "The second argument is: \$2"
echo "Total number of arguments: $#"
执行时,你可以通过传递参数:
./script.sh arg1 arg2
7. 调试和测试
- 使用 bash -x script.sh 进行调试,查看脚本执行的详细信息。
- 使用 set -e 来让脚本遇到错误时立即退出。
8. 脚本进阶
随着你对 Shell 脚本理解的深入,可以进一步学习以下内容:
- 管道和重定向:将命令的输出传递给其他命令,或将输出写入文件。
ls | grep ".txt" > result.txt
- 数组:Shell 脚本也支持数组的使用。
arr=(1 2 3 4 5)
echo ${arr[0]}
- 文件操作:创建、删除、检查文件和目录等操作。
if [ -f "file.txt" ]; thenecho "File exists."
fi
9. 常用 Shell 脚本工具
- awk:文本处理工具,用于模式扫描和处理。
- sed:流编辑器,用于文本替换和编辑。
- grep:文本搜索工具。
相关文章:
shell 脚本的编写学习
学习编写 Shell 脚本是 Linux/Unix 系统管理和自动化的一个非常有用的技能。Shell 脚本是一些 Shell 命令的集合,用户可以用它来自动执行任务、简化工作流程、管理系统等。下面是一个 Shell 脚本学习的入门指南: 1. Shell 脚本基础 Shell 脚本通常是以…...
【氮化镓】高输入功率应力诱导的GaN 在下的退化LNA退化
2019年,中国工程物理研究院电子工程研究所的Tong等人基于实验与第一性原理计算方法,研究了Ka波段GaN低噪声放大器(LNA)在高输入功率应力下的退化机制。实验结果表明,在27 GHz下施加1 W连续波(CW)输入功率应力后,LNA的增益下降约1 dB,噪声系数(NF)增加约0.7 dB。进一…...
根据开始和结束日期,获取每一天和每个月的开始和结束日期的list
获取开始日期与结束日期之间每天的list /*** 根据传入的开始时间和结束时间,筛选出所有的天的list;** param startTime* param endTime*/public Map<String, List<String>> fetchDayListBetweenStartAndEnd(String startTime, String endTime) {// 创建mapMap<…...
Javaweb后端文件上传@value注解
文件本地存储磁盘 阿里云oss准备工作 阿里云oss入门程序 要重启一下idea,上面有cmd 阿里云oss案例集成 优化 用spring中的value注解...
git规范提交之commitizen conventional-changelog-cli 安装
一、引言 使用规范的提交信息可以让项目更加模块化、易于维护和理解,同时也便于自动化工具(如发布工具或 Changelog 生成器)解析和处理提交记录。 通过编写符合规范的提交消息,可以让团队和协作者更好地理解项目的变更历史和版本…...
Java/Kotlin逆向基础与Smali语法精解
1. 法律警示与道德边界 1.1 司法判例深度剖析 案例一:2021年某游戏外挂团伙刑事案 犯罪手法:逆向《王者荣耀》通信协议,修改战斗数据包 技术细节:Hook libil2cpp.so的SendPacket函数 量刑依据:非法经营罪ÿ…...
非软件开发项目快速上手:14款管理软件精选
文章介绍了以下14款项目管理系统:1.Worktile;2.Teambition;3.Microsoft Project;4.Forbes;5.WorkOtter;6.Trello;7.Smartsheet;8.Taiga;9.ClickUp;10.Monday.…...
Redis四种模式在Spring Boot框架下的配置
在Spring Boot框架下配置Redis的四种模式(单机模式、主从模式、哨兵模式、集群模式)可以通过以下方式实现: 1. 单机模式 在application.properties或application.yml中配置Redis的连接信息: # application.properties spring.redi…...
夸父工具箱(安卓版) 手机超强工具箱
如今,人们的互联网活动日益频繁,导致手机内存即便频繁清理,也会莫名其妙地迅速填满,许多无用的垃圾信息悄然占据空间。那么,如何有效应对这一难题呢?答案就是今天新推出的这款工具软件,它能从根…...
混元图生视频-腾讯混元开源的图生视频模型
混元图生视频是什么 混元图生视频是腾讯混元推出的开源图生视频模型,用户可以通过上传一张图片进行简短描述,让图片动起来生成5秒的短视频。模型支持对口型、动作驱动和背景音效自动生成等功能。模型适用于写实、动漫和CGI等多种角色和场景,…...
从零开始打造一个通用的 Vue 卡片组件
前言 大家好,最近在做项目的时候发现我们系统里到处都是各种卡片样式的 UI 元素,每次都要重写一遍真的很烦。于是我花了点时间,封装了一个通用的卡片组件,今天就来分享一下我的开发思路和实现过程。希望能对大家有所帮助…...
选择排序算法OpenMP并行优化
一 选择排序算法原理 时间复杂度,O(n 2)。 每次从未排序序列中选择最小元素,交换到已排序序列末尾。 二 具体步骤 1)初始状态 已排序区间为空,未排序区间为[0,n-1]。 2)第i次迭代 在未排序区间[i, n-1]中找最小值索引min_idx 交换arr[i]与arr[min_idx]。 3)重复…...
Debian系统grub新增启动项
参考链接 给grub添加自定义启动项_linux grub定制 启动项名称自定义-CSDN博客 www.cnblogs.com 1. boot里面的grub.cfg 使用vim打开boot里面的grub.cfg sudo vim /boot/grub/grub.cfg 这时候会看到文件最上方的提示 2. 真正配置grub的文件 从刚才看到的文件提示中&#x…...
VSCode快捷键整理
VSCode快捷键整理 文章目录 VSCode快捷键整理1-VSCode 常用快捷键1-界面操作2-单词移动3-删除操作4-编程相关5-多光标操作6-文件、符号、函数跳转7-鼠标操作8-自动补全操作9-代码折叠操作 1-VSCode 常用快捷键 1-界面操作 文件资源管理器:Ctrl Shift E 跨文件搜…...
刘火良 FreeRTOS内核实现与应用之1——列表学习
重要数据 节点的命名都以_ITEM后缀进行,链表取消了后缀,直接LIST 普通的节点数据类型 /* 节点结构体定义 */ struct xLIST_ITEM { TickType_t xItemValue; /* 辅助值,用于帮助节点做顺序排列 */ struct xLIST_I…...
本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件
文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome!它不仅让你随时随地畅享本地音乐…...
数据集构建与训练前准备
训练数据集目录结构与格式 作者笨蛋学法,先将其公式化,后面逐步自己进行修改,读者觉得看不懂可以理解成,由结果去推过程,下面的这个yaml文件就是结果,我们去推需要的文件夹(名字可以不固定,但是…...
jenkins+ant+jmeter生成的测试报告空白
Jenkins能正常构建成功,但是打开Jenkins上的测试报告,则显示空白 在网上找了很多文章,结果跟别人对比测试报告的配置,发现自己跟别人写的不一样 所以跟着别人改,改成一样的再试试 结果,好家伙࿰…...
利用阿里云Atlas地区选择器与Plotly.js实现数据可视化与交互
在数据科学与可视化领域,交互式图表和地图应用越来越成为数据分析和展示的重要手段。本文将介绍如何结合阿里云Atlas地区选择器与Plotly.js,创建动态交互式的数据可视化应用。 一、阿里云Atlas地区选择器简介 阿里云Atlas是阿里云的一款数据可视化产品…...
行为级建模
1、结构化过程语句 verilog有两种结构化过程语句: always initial verilog本质上是并发的。 //声明初值//方法一 reg clk ; initialclk 1b0 ;//方法二 reg clk 1b0 ;2、过程赋值语句 阻塞赋值 非阻塞赋值 非阻塞赋值可以避免竞争:…...
linux安装java8 sdk,使用 tar.gz安装包手动安装
1. 下载 Java 8 SDK 首先,需要从 Oracle 的官方网站或 OpenJDK 的网站下载 Java 8 的 .tar.gz 文件。并上传到服务器 2. 解压 JDK 下载完成后,使用 tar 命令解压文件。打开服务器终端,然后使用以下命令: tar -xvzf jdk-8uXXX-…...
6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用
目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch, 简称 ES,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,res…...
【python爬虫】酷狗音乐爬取练习
注意:本次爬取的音乐仅有1分钟试听,仅作学习爬虫的原理,完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌,在请求里发现一段mp3文件,复制网址,确实是我们需要的url。 复制音频的…...
计算机视觉cv2入门之图像空域滤波(待补充)
空域滤波 空域滤波是指利用像素及像素领域组成的空间进行图像增强的方法。这里之所以用滤波这个词,是因为借助了频域里的概念。事实上空域滤波技术的效果与频域滤波技术的效果可以是等价的,而且有些原理和方法也常借助频域概念来解释。 原理和分类 空域滤波是在图…...
杂项知识笔记搜集
1.pygame pygame可以画出来图形界面,pygame Python仓库 PyGame游戏编程_游戏程序设计csdn-CSDN博客 2.V4L2库 V4L2是Linux上的Camera采集器的框架 Video for Linux ,是从Linux2.1版本开始支持的。HDMI视频采集卡采集到的视频通过USB3.0输出࿰…...
代码随想录算法训练营第六十一天 | 108. 冗余连接 109. 冗余连接II
108. 冗余连接 题目链接:KamaCoder 文档讲解:代码随想录 状态:AC Java代码: import java.util.*;class Main {public static int[] father;public static void main(String[] args) {Scanner scan new Scanner(System.in);int n…...
选择排序算法的SIMD优化
一、优化原理 将查找数组最小值索引的SIMD优化的函数嵌入选择排序主循环,优化最耗时的最小值查找环节,同时保留选择排序的交换逻辑。 二、关键改造步骤 1)最小值查找模块化 复用SIMD优化的 find_min_index_simd函数。 2)动态子数组处理 每次循环处理 arr[i..n-1] 子数…...
Java本地方法根据线上地址下载图片到本地然后返回本地可以访问的地址
【需求】A和B两台服务器,A是云服务器,B是本地服务器,A和B上部署了一模一样的springboot代码,代码分为前后端,其中在B上前端请求先请求B的后端然后B转发到A的后端,然后A返回给B,B再返回给B的前端…...
游戏引擎学习第149天
今日回顾与计划 在今天的直播中,我们将继续进行游戏的开发工作,目标是完成资产文件(pack file)的测试版本。目前,游戏的资源(如位图和声音文件)是直接从磁盘加载的,而我们正在将其转…...
SpringBoot Test详解
目录 spring-boot-starter-test 1、概述2、常用注解 2.1、配置类型的注解2.2、Mock类型的注解2.3、自动配置类型的注解2.4、启动测试类型的注解2.5、相似注解的区别和联系 3、SpringBootTest和Junit的使用 3.1、单元测试3.2、集成测试 4、MockMvc 4.1、简单示例4.2、自动配置4…...
