1. 什么是Shell脚本?

在Linux系统中,我们每天要和命令行打交道(比如用ls查看文件、cd切换目录)。Shell就是系统提供的“命令解释器”,它接收用户输入的命令并传给系统执行。

Shell脚本,就是把一系列Linux命令按顺序写在一个文本文件里,让系统自动执行这些命令。比如你需要每天备份文件、检查服务器状态,手动执行重复的命令很麻烦,写个脚本就能一键完成!

2. 为什么学Shell脚本?

  • 自动化重复任务:比如定时清理日志、批量修改文件权限、自动部署程序。
  • 提高效率:替代手动操作,减少错误(比如脚本执行时按顺序执行命令,不会漏步骤)。
  • 服务器管理必备:Linux服务器日常运维(监控、备份、故障排查)离不开脚本,是运维/开发的基础技能。

3. 第一个Shell脚本:Hello World

学编程的第一步是打印“Hello World”,我们来写个最简单的Shell脚本!

步骤1:创建脚本文件
用编辑器(比如nanovim)创建一个.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开始,逐步尝试变量、条件、循环,很快就能写出实用的脚本!

小夜