希尔脚本简介及常用命令代码整理

一、Shell 脚本简介

1. 定义

Shell 是用户与操作系统内核交互的桥梁,常见类型有 Bash、Zsh、PowerShell 等。Shell 脚本则是一系列 Shell 命令的集合,通常保存为后缀为.sh 的文本文件。

2. 作用

类别描述
自动化重复性任务例如定期备份数据、执行定时任务,可极大节省人力与时间。
系统配置管理能够高效地对系统各项参数进行配置与调整。
测试脚本开发助力软件测试流程,确保软件质量。
数据处理流水线实现数据自动化处理,提升数据处理效率。

二、Shell 脚本基础结构

1. 基本格式

#!/bin/bash           # 指定解释器为 Bash
echo "Hello World!"   # 输出文本

#!/bin/bash这行代码指定该脚本使用 Bash 解释器执行,echo "Hello World!"是一个简单的输出命令,用于在终端显示指定字符串。

2. 执行方式

2.1 赋予执行权限

使用chmod +x script.sh命令为脚本赋予可执行权限。

2.2 执行脚本

通过./script.sh执行已赋予权限的脚本。

三、Shell 脚本常用命令与语法

1. 基础语法

1.1 Hello World
#!/bin/bash
echo "Hello World"  # 输出字符串

这是 Shell 脚本的入门示例,echo命令用于在终端输出文本信息。

1.2 变量赋值与输出
#!/bin/bash
name="Alice"        # 变量赋值(无需类型声明)
age=25
echo "Name:  $name, Age:  $age"  # 变量通过 $ 符号引用

在 Shell 脚本中变量赋值简单直接,无需声明变量类型。通过$符号引用变量,实现变量值输出。

1.3 注释
#!/bin/bash
# 单行注释:使用#符号
: '多行注释通过: '和' '包裹实现
'

单行注释以#开头,用于对单行代码解释说明。多行注释通过: '' '将注释内容包裹,适合对复杂逻辑块说明,增强脚本可读性。

2. 流程控制

2.1 条件判断(if 语句)
#!/bin/bash
num=10
if [ $num -gt 5 ]; then  # -gt表示大于echo "Number is greater than 5"
elseecho "Number is less than or equal to 5"
fi

if语句通过判断条件决定执行不同代码块。使用[ ]进行条件判断时,注意[ ]内符号与变量间需保留空格。同时支持-eq(等于)、-lt(小于)等多种比较操作符。

2.2 case 语句
#!/bin/bash
day=3
case $day in1) echo "Monday" ;;2) echo "Tuesday" ;;3) echo "Wednesday" ;;*) echo "Unknown day" ;;
esac

case语句基于模式匹配实现多分支逻辑。根据变量值与不同模式匹配,执行相应代码块,*用于匹配其他未列出情况。

3. 循环结构

3.1 for 循环
#!/bin/bash
# 遍历数字序列
for i in {1..5}; doecho "Counter:  $i"
done# 遍历数组
fruits=("Apple" "Banana" "Orange")
for fruit in "${fruits[@]}"; doecho "I like  $fruit"
done

for循环可用于遍历数字范围、字符串列表以及数组。通过设置不同遍历对象,实现对一系列元素的重复操作。

3.2 while 循环
#!/bin/bash
count=1
while [ $count -le 5 ]; doecho "Loop:  $count"((count++))  # 算术运算
done

while循环适用于在条件满足时重复执行代码块,常用于循环次数不确定的场景。使用时要注意设置正确的循环终止条件,避免死循环。

4. 文件与输入处理

4.1 用户输入
#!/bin/bash
echo -n "Enter your name: "  # -n禁止自动换行
read name
echo "Welcome,  $name!"

read命令用于读取用户在终端的输入。通过echo -n输出提示信息,且-n选项可防止echo自动换行,以便用户在同一行输入内容。

4.2 文件操作
#!/bin/bash
# 创建文件并写入内容
echo "Hello" > output.txt# 逐行读取文件
while IFS= read -r line; doecho "Line:  $line"
done < input.txt

在文件操作中,>用于将输出内容覆盖写入文件,>>则是追加写入。通过<实现输入重定向,可从文件中读取内容。上述示例展示了创建文件并写入内容,以及逐行读取文件内容的操作。

5. 进阶技巧

5.1 函数定义
#!/bin/bash
# 定义函数
greet() {echo "Hello,  $1!"  #  $1表示第一个参数
}# 调用函数
greet "Bob"

函数可以将重复使用的代码逻辑封装起来,提高代码复用性。通过$1$2等方式传递参数,实现函数的灵活调用。

5.2 错误处理
#!/bin/bash
set -e  # 遇到错误立即退出# 检查文件是否存在
if [ ! -f "data.txt" ]; thenecho "File not found!" >&2  # 输出到标准错误exit 1
fi

set -e命令可使脚本在遇到错误时立即退出,增强脚本健壮性。通过>&2将错误信息输出到标准错误流,同时使用exit 1表示脚本因错误而退出。

四、常用 Shell 命令分类

1. 文件与目录操作

命令功能描述
ls列出目录内容
cd切换目录
pwd显示当前目录路径
mkdir创建目录
rm删除文件或目录
cp复制文件或目录
mv移动 / 重命名文件或目录
find在目录树中搜索文件

2. 文本处理

命令功能描述
cat查看、连接或创建文本文件
grep在文件中搜索匹配模式
sed流编辑器,用于文本替换、删除、查找等
awk强大的文本分析工具
head/tail显示文件开头或结尾部分
grep "error" log.txt        # 查找包含 "error" 的行
sed 's/foo/bar/' file.txt   # 将 file.txt 中所有 "foo" 替换为 "bar"

五、常见 Shell 调试技巧

1. 调试选项

1.1 bash -x script.sh

显示脚本的执行步骤,方便定位错误发生位置。

1.2 set -v

显示脚本中每一条命令,有助于了解脚本执行流程。

1.3 set -e

使脚本在遇到错误时立即退出,避免错误进一步扩散。

2. 输入输出重定向

2.1 command > output.txt

将命令的输出写入文件,会覆盖原有文件内容。

2.2 command >> output.txt

将命令的输出追加到文件末尾,保留原有文件内容。

2.3 command < input.txt

将文件作为命令的输入来源。

六、实战示例:文件统计工具

#!/bin/bash
# 统计文件行数、单词数和字符数
file=$1if [ -z "$file" ]; thenecho "Usage:  $0 <filename>"exit 1
filines=$(wc -l < "$file")
words=$(wc -w < "$file")
chars=$(wc -m < "$file")echo "Lines:  $lines"
echo "Words:  $words"
echo "Characters:  $chars"

该示例结合条件判断、文件操作以及外部命令,实现一个简单实用的文件统计工具。通过检查输入参数是否为空,确保脚本正确运行,并利用wc命令统计文件的行数、单词数和字符数。

整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励! 

后续可以从简单的命令如echoif语句开始练习,逐步掌握循环、函数等较为复杂的语法结构。用bash -x script.sh等调试选项,帮助理解脚本的执行过程,快速定位和解决问题。

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

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

相关文章

【人工智能下的智算网络】广域网优化

一、广域网络多路径I/O写的并行路径优化方案 1.1、数学建模 网络拓扑优化​ 1. ​拓扑抽象与路径发现​ ​邻接矩阵建模​&#xff1a; 将网络节点抽象为图顶点 G (V, E)&#xff0c;链路带宽与延迟定义为边权 w(e)。构造邻接矩阵 A&#xff0c;其中元素 A_{ij} 表示节点 …

AI测试开发工程师如何用大模型调用工具:从入门到实践

在软件测试领域&#xff0c;测试工程师常常面临测试用例设计复杂、数据生成繁琐、结果验证耗时等挑战。随着大语言模型&#xff08;LLM&#xff09;的迅速发展&#xff0c;Chat类大模型&#xff08;如GPT、LangChain支持的模型&#xff09;为测试开发提供了一种全新思路——工具…

迁移学习基础

知识的“跨界复用” 你是一位经验丰富的厨师&#xff08;源模型&#xff09;&#xff0c;尤其擅长做意大利菜&#xff08;源任务/源域&#xff09;。现在&#xff0c;老板让你去新开的一家融合餐厅工作&#xff0c;需要你做亚洲菜&#xff08;目标任务/目标域&#xff09;。你…

AI医生24小时在线:你的健康新‘算法监护人

2025年仲夏&#xff0c;中国医疗AI领域迎来爆发式突破&#xff1a;罗湖医院集团率先部署"DeepSeek-腾讯混元"双AI诊疗系统&#xff0c;实现患者15分钟极速就诊闭环&#xff1b;复旦大学研发的微量血液检测技术取得重大突破&#xff0c;仅需数滴血样即可筛查上千种疾病…

Java 中 DataSource-数据源 的基础介绍

Java 中 DataSource-数据源 的基础介绍 一、核心概念解析1.1 数据源&#xff08;Data Source&#xff09;1.2 数据库连接池&#xff08;Connection Pool&#xff09;1.3 二者关系1.4 DataSource 接口 二、DataSource 解决的问题与优势2.1 DataSource 的作用2.2 传统方式的局限性…

Vue + Vite 项目部署 Docker 全攻略:原理、路由机制、问题排查与开发代理解析

Vue Vite 项目部署 Docker 全攻略&#xff1a;原理、路由机制、问题排查与开发代理解析 本文面向希望将 Vue 3 Vite 项目部署到生产环境&#xff08;Docker NGINX&#xff09;并深入理解路由行为、构建机制与常见问题排查的开发者。 &#x1f4e6; 一、项目准备 以 Vue 3 …

Vue3 + TypeScript 使用 v-bind() 在 <style scoped> 中动态设置 CSS 样式值

使用要求&#xff1a; Vue 3.3 <style scoped>&#xff0c;Vue 的 v-bind() 在 CSS 中只支持在 scoped style 或 CSS Modules 中使用v-bind("cssVar") 双引号包裹响应式变量&#xff0c;变量 cssVar 必须是 Vue 的响应式数据&#xff08;如 ref 或 reactive&…

php列表头部增加批量操作按钮,多选订单数据批量微信退款(含微信支付SDK)

index_search.html data-table-id:表格id data-rule:需要传输的列表字段 data-action:控制器方法 <a class="layui-btn layui-btn-primary layui-btn-sm" style=

小程序还没有上线就提示小程序违规,支付失败

如果出现这种情况&#xff0c;一般情况下不是真正的违规&#xff0c;是因为在小程序后台&#xff0c;没有设置订单详情页面的path地址的原因 1.首先看一下&#xff0c;在站内信中是否有相关订单的通知&#xff1a;站内信&#xff08;小程序通知中心&#xff09;查看是否看到 关…

展开说说Android之Glide详解_源码解析

基于上一篇介绍了Glide的使用篇本文分析一下Glide的源码实现&#xff0c;看看我们简单几步就实现的图片展示功能在源码中是怎样完成的。 一、Glide中的核心文件 先逐个介绍一下个人以为的几个核心类&#xff1a;‌ 1、Glide Glide是必经的入口&#xff0c;通过Glide.get(con…

商品中心—6.商品考核系统的技术文档二

大纲 1.基于大数据系统的商品考核数据指标 2.基于商品考核数据指标的商品考核流程 3.商品考核失败后的处理 考核流程的设计 4.商品考核系统数据库模型设计 5.商品考核系统核心接口 6.商品生命周期系统的定时考核任务 6.商品生命周期系统的定时考核任务 (1)定时任务处理…

鸿蒙组件通用事件开发全攻略:从基础交互到工程实践

一、引言&#xff1a;事件系统 —— 构建交互体验的核心枢纽 在鸿蒙应用开发体系中&#xff0c;组件事件系统是连接用户操作与应用逻辑的关键桥梁。从基础的点击交互到复杂的多触点手势&#xff0c;通用事件覆盖了全场景设备的交互需求。本文将系统解构鸿蒙事件体系的核心机制…

老项目重构难题破解:飞算 JavaAI 如何实现技术升级突围

在企业数字化转型进程中&#xff0c;大量 Java 老项目因长期迭代积累的技术债务&#xff0c;陷入 "重构必要性与实施难度并存" 的困境。这些遗留系统普遍存在代码体系老化、架构模式滞后、维护成本高企等问题&#xff0c;成为企业技术升级的绊脚石。 传统 Java 老项…

idea使用技巧分享

写在前面 分享一些常用的idea使用技巧&#xff0c;进来看看有没有你不知道的。 设置项目默认配置 TODO设置 位置 方式一&#xff1a;setting -> editor -> TODO 方式二&#xff1a; 定义Patterns过滤模式 正则中“\b”是元字符代表着单词的开头或结尾&#xff0c;也就…

【Dify精讲】第8章:Agent能力实现原理【知识卡片】

第8章&#xff1a;Agent能力实现原理http://www.airinto.com/share/e7b7e27f 一、Agent架构设计 二、工具调用机制 三、ReAct框架实现 四、自定义Agent开发 五、性能优化与监控 六、总结与实战建议

【软件】安装Miniconda

安装 根据搜索结果&#xff0c;以下是使用Homebrew在macOS上安装Miniconda的详细步骤&#xff1a; 1.安装Homebrew&#xff08;如果尚未安装&#xff09; 打开终端&#xff08;Terminal&#xff09;&#xff0c;运行以下命令安装Homebrew&#xff1a; /bin/bash -c "$(…

FastAPI:(6)错误处理

FastAPI&#xff1a;(6)错误处理 由于CSDN无法展示「渐构」的「#d&#xff0c;#e&#xff0c;#t&#xff0c;#c&#xff0c;#v&#xff0c;#a」标签&#xff0c;推荐访问我个人网站进行阅读&#xff1a;Hkini 「渐构展示」如下&#xff1a; #c 概述 文章概念关系 graph TDA…

408第一季 - 数据结构 - 排序

排序的概念 外部排序很难&#xff0c;后面都是内部排序 插入排序 直接插入排序 理解 这个排序第一轮是从第二个元素开始的 然后是从后往前一个一个比的 然后我们看i5的情况&#xff0c;会出现比较次数和移动次数的概念&#xff0c;这里97动了 然后i8时&#xff0c;49最好…

高效账号信息管理工具,可安全随机生成密码

软件介绍 今天给大家推荐一款安全可靠的密码管理工具&#xff0c;帮助用户轻松管理各类账号密码。 安全便捷的密码解决方案 这是一款采用先进加密技术开发的密码管理器&#xff0c;不仅可以生成高强度随机密码&#xff0c;还提供安全的账号密码备份存储功能。 基础安全设置 …

如何在markdown文件中(博客)添加emoji表情,让你的博客看起来更加优雅

在Markdown中使用Emoji的完整指南 按分类快速参考的完整Emoji列表一、状态指示类:bulb:二、提示信息类:bulb:三、内容类型类:bulb:四、操作指令类:bulb:五、进度状态类:bulb:六、技术相关类:bulb:七、人员角色类:bulb:八、版本控制类:bulb: 你学会了吗 按分类快速参考的完整Emo…