前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一行一行教你搞定 Shell 脚本基础,别再死记硬背了

一行一行教你搞定 Shell 脚本基础,别再死记硬背了

作者头像
IT咸鱼
发布于 2025-05-22 03:05:24
发布于 2025-05-22 03:05:24
23200
代码可运行
举报
运行总次数:0
代码可运行

每天分享技术栈,开发工具等

文章篇幅较长,建议收藏+转发,慢慢啃!只要认真跟着练,保证你能学会 Shell 脚本,脱离“看得懂却写不出”的尴尬!

你是不是也听说过 Shell 脚本很重要?

你是不是也尝试看过几篇博客、视频,感觉懂了,但真让你写一个脚本,又开始挠头?

我以前就是那种“死记硬背一堆命令+if判断”的人,结果还是不会写。后来我换了一种方式——「一行一行去理解、去写、去调试」

这篇文章,我不讲虚的,就从最基础的 #!/bin/bash开始,一步一步带你写出自己的第一个 Shell 脚本。就算你现在一点都不懂 Linux,也能看懂!

本文环境:

  • 系统:Almalinux 8.5(三台机器 master、node1、node2)
  • 用户:普通 DBA 想搞运维脚本
  • 目标:搞定 Shell 脚本入门、能自己写逻辑清晰的小工具

第一步:从一行开始,写一个最简单的脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

echo"你好,Shell 脚本!"

这一段你可以直接复制进一个文件里,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim hello.sh

然后把上面的内容贴进去,保存退出。

接着让它可以执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
chmod +x hello.sh

最后执行它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./hello.sh

你会看到输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
你好,Shell 脚本!

这一刻,你已经写出了你的第一个 Shell 脚本,别小看它,它比你手动敲命令强多了。


第二步:变量是灵魂,一定要会用!

什么是变量?你可以把它当成“一个代号”,我们来试试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

name="小白DBA"

echo"你好,$name"

保存为 var.sh,加权限,执行试试。

重点来了:

  • name="小白DBA"赋值不能有空格!
  • echo "你好,$name"双引号里可以展开变量
  • 如果你写成 echo '你好,$name',变量不会被替换哦

第三步:加点判断,Shell 也能做选择题!

最常见的场景,比如判断文件是否存在:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

if [ -f /etc/passwd ]; then

echo"文件存在"

else

echo"文件不存在"

fi

说明:

  • -f是判断文件是否存在且为普通文件
  • []是条件测试,里面记得两边要有空格
  • thenfi是 Shell 的标志性写法(fi = if 的反着)

再比如用户输入判断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

read -p "请输入你的名字:" yourname



if [ "$yourname" == "root" ]; then

echo"你好,管理员!"

else

echo"你好,$yourname"

fi


第四步:循环很重要,自动批量操作全靠它!

我们写个脚本,一次性 ping 多个主机:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

for ip in 192.168.1.{1..5}

do

    ping -c 1 $ip > /dev/null

if [ $? -eq 0 ]; then

echo"$ip 通了"

else

echo"$ip 不通"

fi

done

这段代码你要掌握:

  • for ... in是标准写法
  • {1..5}会展开成 1 到 5
  • $?是上一条命令的返回值,0 表示成功
  • > /dev/null是为了不输出 ping 的详细内容

第五步:函数登场,模块化开始

把常用逻辑封装起来,反复用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash



check_port() {

if ss -tunlp | grep ":$1" > /dev/null; then

echo"端口 $1 正在监听"

else

echo"端口 $1 未打开"

fi

}



check_port 22

check_port 80

说明:

  • check_port是一个函数
  • $1表示第一个参数
  • 你可以调用很多次,逻辑很清晰

第六步:真实案例,写个服务状态检查工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash



SERVICES=("sshd""mysqld""nginx")



for svc in"${SERVICES[@]}"

do

    systemctl is-active --quiet $svc

if [ $? -eq 0 ]; then

echo"$svc 运行中"

else

echo"$svc 没有运行"

fi

done

解释一下:

  • SERVICES是一个数组
  • ${SERVICES[@]}是遍历方式
  • systemctl is-active可以检测服务状态
  • --quiet是静默模式,不输出内容

第七步:用户交互 + 输入参数,做成通用工具

你可以让脚本接收外部参数,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/bash

if [ $# -lt 1 ]; then

echo"用法:$0 <文件路径>"

exit 1

fi



file=$1



if [ -f "$file" ]; then

echo"$file 是一个文件"

else

echo"$file 不存在"

fi

说明:

  • $#表示参数数量
  • $0是脚本名
  • $1是第一个参数
  • exit 1表示退出并提示错误

第八步:调试技巧,别再瞎猜了!

有时候脚本不工作,我们可以这样加 -x

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bash -x myscript.sh

这样会显示每一步执行过程,变量展开也能看到,超级有用!

还可以手动在脚本中加入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set -x  # 开始调试

set +x  # 关闭调试


「接下来怎么学?」

建议你试着写几个自己的小脚本,比如:

  1. 批量备份某目录下的文件
  2. 每天定时清理日志(配合 crontab)
  3. 监控磁盘占用,超过 80% 就发邮件/日志报警
  4. 用 Shell 实现一个简单的菜单交互脚本
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT咸鱼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:从一行开始,写一个最简单的脚本
  • 第二步:变量是灵魂,一定要会用!
  • 第三步:加点判断,Shell 也能做选择题!
  • 第四步:循环很重要,自动批量操作全靠它!
  • 第五步:函数登场,模块化开始
  • 第六步:真实案例,写个服务状态检查工具
  • 第七步:用户交互 + 输入参数,做成通用工具
  • 第八步:调试技巧,别再瞎猜了!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档