shell 脚本的编写学习

news2025/3/11 15:15:05

学习编写 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!"

执行方法:

  1. 保存文件为 hello.sh。
  2. 给脚本赋执行权限:chmod +x hello.sh。
  3. 执行脚本:./hello.sh。

示例 2: 使用变量

#!/bin/bash
name="Alice"
echo "Hello, $name!"

在这个例子中,我们定义了一个变量 name,然后通过 $name 来访问变量。

示例 3: 使用条件语句

#!/bin/bash
age=20

if [ $age -ge 18 ]; then
  echo "You are an adult."
else
  echo "You are a minor."
fi

这个脚本通过 if 判断 age 是否大于等于 18,输出相应的结果。

示例 4: 循环结构

#!/bin/bash
for i in {1..5}
do
  echo "Number $i"
done

这个脚本通过 if 判断 age 是否大于等于 18,输出相应的结果。

示例 4: 循环结构

#!/bin/bash
for i in {1..5}
do
  echo "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 ]; then
  echo "File copied successfully."
else
  echo "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" ]; then
  echo "File exists."
fi

9. 常用 Shell 脚本工具

  • awk:文本处理工具,用于模式扫描和处理。
  • sed:流编辑器,用于文本替换和编辑。
  • grep:文本搜索工具。

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

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

相关文章

【氮化镓】高输入功率应力诱导的GaN 在下的退化LNA退化

2019年,中国工程物理研究院电子工程研究所的Tong等人基于实验与第一性原理计算方法,研究了Ka波段GaN低噪声放大器(LNA)在高输入功率应力下的退化机制。实验结果表明,在27 GHz下施加1 W连续波(CW)输入功率应力后,LNA的增益下降约1 dB,噪声系数(NF)增加约0.7 dB。进一…

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函数 量刑依据:非法经营罪&#xff…

非软件开发项目快速上手:14款管理软件精选

文章介绍了以下14款项目管理系统:1.Worktile;2.Teambition;3.Microsoft Project;4.Forbes;5.WorkOtter;6.Trello;7.Smartsheet;8.Taiga;9.ClickUp;10.Monday.…

夸父工具箱(安卓版) 手机超强工具箱

如今,人们的互联网活动日益频繁,导致手机内存即便频繁清理,也会莫名其妙地迅速填满,许多无用的垃圾信息悄然占据空间。那么,如何有效应对这一难题呢?答案就是今天新推出的这款工具软件,它能从根…

混元图生视频-腾讯混元开源的图生视频模型

混元图生视频是什么 混元图生视频是腾讯混元推出的开源图生视频模型,用户可以通过上传一张图片进行简短描述,让图片动起来生成5秒的短视频。模型支持对口型、动作驱动和背景音效自动生成等功能。模型适用于写实、动漫和CGI等多种角色和场景,…

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上的测试报告,则显示空白 在网上找了很多文章,结果跟别人对比测试报告的配置,发现自己跟别人写的不一样 所以跟着别人改,改成一样的再试试 结果,好家伙&#xff0…

利用阿里云Atlas地区选择器与Plotly.js实现数据可视化与交互

在数据科学与可视化领域,交互式图表和地图应用越来越成为数据分析和展示的重要手段。本文将介绍如何结合阿里云Atlas地区选择器与Plotly.js,创建动态交互式的数据可视化应用。 一、阿里云Atlas地区选择器简介 阿里云Atlas是阿里云的一款数据可视化产品…

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入门之图像空域滤波(待补充)

空域滤波 空域滤波是指利用像素及像素领域组成的空间进行图像增强的方法。这里之所以用滤波这个词,是因为借助了频域里的概念。事实上空域滤波技术的效果与频域滤波技术的效果可以是等价的,而且有些原理和方法也常借助频域概念来解释。 原理和分类 空域滤波是在图…

游戏引擎学习第149天

今日回顾与计划 在今天的直播中,我们将继续进行游戏的开发工作,目标是完成资产文件(pack file)的测试版本。目前,游戏的资源(如位图和声音文件)是直接从磁盘加载的,而我们正在将其转…

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)!

PyCharm 接入 DeepSeek、OpenAI、Gemini、Mistral等大模型完整版教程(通用)! 当我们成功接入大模型时,可以选中任意代码区域进行解答,共分为三个区域,分别是选中区域、提问区域以及回答区域,我…