Linux Shell 脚本编写教程
Shell 脚本是 Linux/Unix 系统中非常强大的工具,它允许你将一系列命令组合成一个可执行文件,实现自动化任务、系统管理、部署等功能。本教程将带你从基础开始学习如何编写 Shell 脚本。
1. 什么是 Shell 脚本?
Shell 脚本是一种解释型语言,它使用 Shell(如 Bash、Zsh 等)作为解释器来执行命令。简单来说,它就是把你在终端中手动输入的命令按顺序写到一个文件中,然后让 Shell 自动执行。
2. 第一个 Shell 脚本:Hello World
2.1 创建脚本文件
使用任何文本编辑器创建一个新文件,例如 hello.sh:
bash
touch hello.sh2.2 编写脚本内容
编辑 hello.sh,添加以下内容:
bash
#!/bin/bash
# 这是一个简单的 Shell 脚本
echo "Hello, World!"#!/bin/bash:这被称为 Shebang (或 Hashbang)。它告诉系统应该使用哪个解释器来执行这个脚本。在这里,我们指定使用/bin/bash。# 这是一个简单的 Shell 脚本:以#开头的行是注释,Shell 会忽略它们。echo "Hello, World!":echo命令用于在终端输出文本。
2.3 赋予执行权限
默认情况下,新创建的文件没有执行权限。你需要使用 chmod 命令来添加执行权限:
bash
chmod +x hello.sh2.4 运行脚本
现在你可以运行你的第一个 Shell 脚本了:
bash
./hello.sh输出:
Hello, World!3. 变量
Shell 脚本中可以定义和使用变量来存储数据。
3.1 定义变量
bash
name="Alice"
age=30
# 注意:变量名和等号之间不能有空格3.2 使用变量
使用 $ 符号来引用变量的值:
bash
#!/bin/bash
name="Bob"
echo "My name is $name."
echo "My name is ${name}." # 推荐使用大括号,避免歧义输出:
My name is Bob.
My name is Bob.4. 用户输入
使用 read 命令获取用户的输入。
bash
#!/bin/bash
echo "请输入你的名字:"
read username
echo "你好, $username!"5. 条件判断 (if/else)
使用 if、elif、else 和 fi 来进行条件判断。
bash
#!/bin/bash
num=10
if [ $num -gt 5 ]; then
echo "$num 大于 5"
elif [ $num -eq 5 ]; then
echo "$num 等于 5"
else
echo "$num 小于 5"
fi常用的条件判断符号:
-eq:等于-ne:不等于-gt:大于-ge:大于等于-lt:小于-le:小于等于-z:字符串为空-n:字符串不为空==:字符串相等!=:字符串不相等
6. 循环 (for/while)
6.1 for 循环
bash
#!/bin/bash
for i in 1 2 3 4 5; do
echo "当前数字是: $i"
done
# 遍历文件列表
for file in *.sh; do
echo "找到脚本文件: $file"
done6.2 while 循环
bash
#!/bin/bash
count=1
while [ $count -le 5 ]; do
echo "计数: $count"
count=$((count + 1)) # 算术运算
done7. 函数
将重复的代码块封装成函数。
bash
#!/bin/bash
# 定义函数
greet() {
echo "你好, $1!" # $1 表示函数的第一个参数
}
# 调用函数
greet "World"
greet "Shell Script"8. 脚本调试
在运行脚本时,可以使用 -x 选项来开启调试模式,查看脚本的执行过程。
bash
bash -x your_script.sh9. 最佳实践
- 添加 Shebang:始终在脚本开头添加
#!/bin/bash(或你使用的 Shell)。 - 添加注释:解释脚本的功能、复杂逻辑和重要步骤。
- 使用有意义的变量名:提高代码可读性。
- 检查退出状态:使用
$?检查上一个命令的退出状态,0表示成功,非0表示失败。 - 错误处理:使用
set -e在命令失败时立即退出脚本。 - 引用变量:使用双引号
"$variable"来引用变量,以避免空格或特殊字符引起的问题。 - 保持简洁:一个脚本只做一件事,并把它做好。
通过本教程,你已经掌握了 Shell 脚本编写的基础知识。现在你可以尝试编写自己的脚本来自动化日常任务了!