Shell 脚本入门:变量、条件判断与循环

举报
yd_285516661 发表于 2026/11/14 06:12:42 2026/11/14
【摘要】 引言在 Linux 服务器上,每天凌晨备份日志、清理临时文件、检查服务状态,手动操作既耗时又容易出错。Shell 脚本就是把一条条命令组织起来、一次编写多次运行的工具,是运维入门和开发提效的第一步。本文以 Bash 为例,介绍变量、条件判断与循环,并用一个备份小脚本把它们串起来。 一、变量定义变量时等号两边不能有空格,引用时在变量名前加 $,花括号可以明确变量边界。name="shell"...

引言

在 Linux 服务器上,每天凌晨备份日志、清理临时文件、检查服务状态,手动操作既耗时又容易出错。Shell 脚本就是把一条条命令组织起来、一次编写多次运行的工具,是运维入门和开发提效的第一步。本文以 Bash 为例,介绍变量、条件判断与循环,并用一个备份小脚本把它们串起来。

一、变量

定义变量时等号两边不能有空格,引用时在变量名前加 $,花括号可以明确变量边界。

name="shell"
count=3
echo "你好,$name"
echo "总数是:${count}个"

系统自带 $HOME(家目录)、$PATH(命令搜索路径)等环境变量;$1、$2 接收命令行参数,$# 表示参数个数。readonly 可把变量设为只读,unset 可以删除变量。

二、条件判断

if 根据命令的退出状态做选择,0 表示成功,非 0 表示失败。数字比较用 -eq、-gt、-lt;文件判断用 -f、-d、-e。

if [ -f "/var/log/app.log" ]; then
  echo "日志文件存在"
else
  echo "日志文件不存在"
fi

分支较多时用 case 按模式匹配,比一长串 elif 更清晰;字符串比较建议用 [[ ]],对空格和空值更宽容。

三、循环

for 适合次数确定的任务,while 适合条件成立就一直做的任务。

for i in 1 2 3; do
  echo "第 $i 次"
done
n=1
while [ $n -le 3 ]; do
  echo "正在处理第 $n 项"
  n=$((n + 1))
done

break 可以提前跳出循环,continue 跳过本次进入下一次。写循环一定要确认退出条件,否则脚本会一直跑下去。

四、实战:备份日志

#!/bin/bash
src="/var/log"
dst="/backup/$(date +%Y%m%d)"
mkdir -p "$dst"
for file in "$src"/*.log; do
  [ -f "$file" ] && cp "$file" "$dst/" && echo "已备份:$file"
done

变量记录源目录和按日期生成的目标目录,循环逐个处理日志文件,判断过滤掉不存在的文件。保存为 backup.sh,执行 chmod +x backup.sh 后即可运行,配合定时任务就能自动备份。

结尾

变量负责记住数据,条件判断负责做选择,循环负责重复执行,三者组合就能把大部分日常重复工作写成脚本。建议从备份、清理这类小任务练起:先在测试目录跑通,再用到真实环境;多用 echo 打印中间结果,出问题也更容易定位。掌握这三块基础,就迈出了 Shell 入门最关键的一步。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。