希尔脚本简介及常用命令代码整理
一、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
命令统计文件的行数、单词数和字符数。
整理不易,诚望各位看官点赞 收藏 评论 予以支持,这将成为我持续更新的动力源泉。若您在阅览时存有异议或建议,敬请留言指正批评,让我们携手共同学习,共同进取,吾辈自当相互勉励!
后续可以从简单的命令如echo
、if
语句开始练习,逐步掌握循环、函数等较为复杂的语法结构。用bash -x script.sh
等调试选项,帮助理解脚本的执行过程,快速定位和解决问题。