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

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

一、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.lryc.cn/news/571452.html

相关文章:

  • 20倍光学镜头怎么实现20+20倍数实现
  • Spring @OnApplicationEvent 典型用法
  • MacOS15.5 MySQL8 开启 mysql_native_password
  • 【入门级-基础知识与编程环境:计算机的历史和常见用途】
  • 【RocketMQ 生产者和消费者】- 消费者重平衡(2)- 分配策略
  • 338比特位技术
  • element ui el-table嵌套el-table,实现checkbox联动效果
  • 轻松搭建Linux开发环境:使用`build-essential`安装GCC编译器**
  • Flask设计网页截屏远程电脑桌面及切换运行程序界面
  • 软件体系结构-论述、设计、问答
  • C++---类和对象(中)
  • BERT介绍
  • 失业学习-前端工程化-webpack基础
  • 智慧城市-城市道路塌方检测数据集VOC+YOLO格式768张1类别
  • 微軟將開始使用 Copilot Vision 監控 Windows 10 和 11 用戶的螢幕
  • 视频点播web端AI智能大纲(自动生成视频内容大纲)的代码与演示
  • 【matlab】图片转视频
  • 【PDF提取表格】批量提取PDF里的内容保存到Excel表格,批量提取PDF文档中的信息到Excel的具体步骤和注意事项
  • FPGA基础 -- Verilog门级建模之奇偶校验电路
  • ollama部署开源大模型
  • VS和VS Code 对比和区别
  • 【图像处理入门】9. 基础项目实战:从去噪到图像加密
  • 计算机视觉课程笔记-机器学习中典型的有监督与无监督学习方法的详细分类、标签空间性质、解释说明,并以表格形式进行总结
  • 论文笔记 <交通灯> IntelliLight:一种用于智能交通灯控制的强化学习方法
  • 2025年- H82-Lc190--322.零钱兑换(动态规划)--Java版
  • 海康威视GigE工业相机的python调用demo
  • 2.8 获取IMU数据与航向锁定
  • Kafka 4.0.0集群部署
  • 二十四、【用户管理与权限 - 篇六】前端动态展现:基于权限的菜单与按钮控制
  • Leetcode-​2537. 统计好子数组的数目​