1. 什么是Shell脚本?¶
在Linux系统中,我们每天要和命令行打交道(比如用ls查看文件、cd切换目录)。Shell就是系统提供的“命令解释器”,它接收用户输入的命令并传给系统执行。
而Shell脚本,就是把一系列Linux命令按顺序写在一个文本文件里,让系统自动执行这些命令。比如你需要每天备份文件、检查服务器状态,手动执行重复的命令很麻烦,写个脚本就能一键完成!
2. 为什么学Shell脚本?¶
- 自动化重复任务:比如定时清理日志、批量修改文件权限、自动部署程序。
- 提高效率:替代手动操作,减少错误(比如脚本执行时按顺序执行命令,不会漏步骤)。
- 服务器管理必备:Linux服务器日常运维(监控、备份、故障排查)离不开脚本,是运维/开发的基础技能。
3. 第一个Shell脚本:Hello World¶
学编程的第一步是打印“Hello World”,我们来写个最简单的Shell脚本!
步骤1:创建脚本文件
用编辑器(比如nano或vim)创建一个.sh文件(.sh是Shell脚本的默认扩展名):
nano test.sh # 用nano编辑器打开,没有nano的话用vim test.sh
步骤2:写入脚本内容
在文件中输入以下内容(每行一个命令):
#!/bin/bash # 告诉系统用bash解释器执行(必须放在第一行)
echo "Hello, Linux Server!" # 打印一句话
#!/bin/bash:Shebang行,指定脚本用bash执行(如果是其他Shell如zsh,改成#!/bin/zsh)。echo:输出命令,类似Windows的echo。
步骤3:保存并退出
- 在nano中:按Ctrl+O保存(输入文件名test.sh,回车),再按Ctrl+X退出。
步骤4:给脚本执行权限
Shell脚本默认是“可读可写”,但没有“执行”权限,需要用chmod命令赋予:
chmod +x test.sh # +x表示给所有者添加执行权限
步骤5:运行脚本
直接执行脚本文件(注意路径,当前目录用./):
./test.sh
输出结果:
Hello, Linux Server!
4. Shell脚本基础语法¶
变量与赋值¶
Shell脚本中可以定义变量,格式为变量名=值(等号两边不能有空格!)。
示例:
#!/bin/bash
name="Linux" # 定义变量name,值为"Linux"
version=5 # 定义数字变量version
echo "Hello, $name! Version $version" # 用$变量名调用变量
执行结果:
Hello, Linux! Version 5
常用系统变量:
- $PATH:系统命令路径(比如echo $PATH可查看所有可直接执行的命令)。
- $HOME:用户主目录(比如echo $HOME显示/home/你的用户名)。
条件判断(if-else)¶
如果需要根据条件执行不同命令,用if语句。格式:
if [ 条件 ]; then
条件成立时执行的命令
else
条件不成立时执行的命令
fi # 结束if块
示例:判断文件是否存在
#!/bin/bash
file="test.txt"
if [ -f "$file" ]; then # -f表示判断是否为普通文件
echo "$file 存在!"
else
echo "$file 不存在,创建中..."
touch "$file" # 创建空文件
fi
循环(for/while)¶
循环用于重复执行命令,比如遍历多个文件或执行重复操作。
for循环示例:打印1到5
#!/bin/bash
for i in {1..5}; do # {1..5}生成1到5的序列
echo "第 $i 次循环"
done
执行结果:
第 1 次循环
第 2 次循环
第 3 次循环
第 4 次循环
第 5 次循环
while循环示例:计算1+2+…+10
#!/bin/bash
sum=0
i=1
while [ $i -le 10 ]; do # -le表示小于等于
sum=$((sum + i)) # (( ))用于算术运算
i=$((i + 1))
done
echo "1到10的和是:$sum" # 输出结果:55
5. 实战:简单的服务器监控脚本¶
现在结合前面的知识,写一个脚本检查磁盘空间,当/分区使用率超过80%时提醒!
#!/bin/bash
# 检查根目录磁盘使用率
disk_usage=$(df -h | grep "/$" | awk '{print $5}' | sed 's/%//') # 提取使用率(%去掉)
if [ $disk_usage -gt 80 ]; then # -gt表示大于
echo "警告:根分区使用率过高!当前使用率:$disk_usage%"
# 可选:发送邮件提醒(需安装mailx)
# echo "根分区使用率超过80%,请清理空间!" | mail -s "磁盘警告" your@email.com
else
echo "根分区使用率正常:$disk_usage%"
fi
关键命令解释:
- df -h:查看磁盘空间(-h显示人类可读单位,如GB、MB)。
- grep "/$":筛选根分区(/结尾)。
- awk '{print $5}':提取使用率(df输出的第5列是使用率)。
- sed 's/%//':去掉百分号,转为数字。
6. 注意事项¶
- 权限问题:执行脚本前必须用
chmod +x 脚本名赋予执行权限。 - 变量赋值:等号两侧不能有空格,如
name = "Linux"会报错。 - 路径问题:执行脚本时用
./脚本名(当前目录),或绝对路径如/home/user/test.sh。
7. 学习资源推荐¶
- 基础练习:在Linux终端手动敲命令,尝试修改脚本中的变量、循环条件。
- 工具推荐:
bash帮助文档(man bash)、在线Shell脚本编辑器(如replit.com)。 - 进阶方向:学习
crontab定时任务(如crontab -e设置每天3点执行脚本)。
通过Shell脚本,你可以把复杂的手动操作变成自动化流程,让Linux服务器管理更高效。从简单的Hello World开始,逐步尝试变量、条件、循环,很快就能写出实用的脚本!