首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一行一行教你搞定 Shell 脚本基础,别再死记硬背了

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

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

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

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

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

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

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

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

本文环境:

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

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

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

echo"你好,Shell 脚本!"

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

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

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

接着让它可以执行:

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

最后执行它:

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

你会看到输出:

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

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


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

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

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

name="小白DBA"

echo"你好,$name"

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

重点来了:

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

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

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

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

if [ -f /etc/passwd ]; then

echo"文件存在"

else

echo"文件不存在"

fi

说明:

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

再比如用户输入判断:

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

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



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

echo"你好,管理员!"

else

echo"你好,$yourname"

fi


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

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

代码语言:javascript
代码运行次数:0
运行
复制
#!/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
运行
复制
#!/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
运行
复制
#!/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
运行
复制
#!/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
运行
复制
bash -x myscript.sh

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

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

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

set +x  # 关闭调试


「接下来怎么学?」

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

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
一行一行教你搞定 Shell 脚本基础,别再死记硬背了(第二章)
好嘞,接下来我们就「接上文内容」,继续完善这篇《一行一行教你搞定 Shell 脚本基础,别再死记硬背了》。这一次我们加上「更详细的“创建文件”步骤」,让你从“完全不会”变成“我也能写 Shell 脚本”,不跳步骤、不讲空话,一步步带你走。
IT咸鱼
2025/05/27
2580
一行一行教你搞定 Shell 脚本基础,别再死记硬背了(第二章)
10 个实战与面试【常用 Shell 脚本】编写
5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。
昱良
2019/06/19
4940
shell脚本快速入门之-----shell脚本练习100例!!!
1、可以采用冒泡排序的方式。 2、双层循环,外层控制把数组中每一个元素都取出来,内层循环采用当前元素和向后的数组元素比大小,最小的值和当前元素交换的方式 3、输入成绩这一块,因为数组已经有序了,只要拿输入元素和数组中元素相比,如果数组中元素大于当前输入元素,记住当前位置,当前位置数组后面的元素都向后移一位。
不吃小白菜
2020/09/03
23.3K2
101个shell脚本
emm。。这个脚本是因为tomcat没有自带的能够给service开机启动的脚本,我就琢磨着自己写了一个简单的启动脚本,如下:
端碗吹水
2020/09/23
1.5K0
101个shell脚本
Shell编程从入门到精通
Shell 是一个用 C 语言编写的程序, 通过 Shell 用户可以访问操作系统内核服务。 它类似于 DOS 下的 command 和后来的 cmd.exe。 Shell既是一种命令语言,又是一种程序设计语言。
硅谷子
2020/12/19
9940
Shell编程从入门到精通
Linux Shell常用脚本整理
一些常用的Shell脚本笔记,这是当年在兄弟连学习Linux运维是写过的一些案例,后期在工作中也遇到了一些问题需要使用shell来解决的,这里总结起来方便以后可以直接复用。
王 瑞
2022/12/28
1K0
Linux 【Shell脚本经典案例】
===============Talk is cheap, show me the code,bye-bye================
IT茂茂
2020/09/17
3.5K0
Linux 【Shell脚本经典案例】
2018-11-22 10 个实战及面试常用 Shell 脚本编写
注意事项 1)开头加解释器:#!/bin/bash 2)语法缩进,使用四个空格;多加注释说明。 3)命名建议规则:变量名大写、局部变量小写,函数名小写,名字体现出实际作用。 4)默认变量是全局的,在函数中变量local指定为局部变量,避免污染其他作用域。 5)有两个命令能帮助我调试脚本:set -e 遇到执行非0时退出脚本,set-x 打印执行过程。 6)写脚本一定先测试再到生产上。
Albert陈凯
2018/12/14
4450
Shell编程
Shell 是一个用 C 语言编写的程序,通过 Shell 用户可以访问操作系统内核服务。
用户4870038
2021/02/05
5.2K0
Shell编程
shell脚本实例精讲_shell脚本编程实例
shell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 Shell 的本质。
全栈程序员站长
2022/11/10
1.6K0
bash/shell编程学习(2)
注:linux中有一个经典名言【一切皆文件】,/dev/null可以认为是一个特殊的空文件,更形象点,可以理解为科幻片中的黑洞,任何信息重向定输出到它后,便有去无回,当然黑洞里也没有信息能出来。
菩提树下的杨过
2018/09/20
6120
bash/shell编程学习(2)
一文教你如何学会写Shell脚本
做 Java 的肯定都接触过 Linux 系统,那么很多时候我们在开发的过程中都是把我们项目打成一个jar包,或者是war包的形式,然后通过 XFTP 上传到我们服务器的指定目录,然后运行一端启动脚本,让我们的项目变得可以访问 就像 ./sh service.sh start 然后启动我们写好的 sh 的shell脚本。接下来我们就来学习一下关于 Shell 脚本是如何写出来的。
Java极客技术
2022/12/02
4290
Shell脚本编写:从零到精通
🐱 猫头虎博主又来了!在本篇文章中,我们要探讨的是Shell脚本编写,一个对于每位Linux和Unix用户都至关重要的技能。我相信通过我的详细指导,你可以轻松地在搜索引擎上找到本篇内容,同时快速掌握Shell脚本的各种奥秘。不论你是编程新手还是资深开发者,相信我,这篇文章都将为你带来意想不到的收获!🚀
猫头虎
2024/04/09
3200
shell 循环语句[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163943.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/15
5630
Linux、docker、kubernetes、MySql、Shell、kafka运维快餐
lsof -i:[port] netstat -anp |grep [port]
justmine
2019/02/15
1.1K0
Shell脚本编程_shell简单脚本
  shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 shell。
全栈程序员站长
2022/11/09
8.4K0
Shell脚本编程_shell简单脚本
Linux Shell脚本编程提高
Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核,不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序.Shel编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果,下面我们会介绍Shell-Script的编写.
王 瑞
2022/12/28
3.5K0
Linux Shell脚本编程提高
shell 编程详细命令
多条件判断(&& 表示前一条命令执行成功时,才执行后一条命令,|| 表示上一条命令执行失败后,才执行下一条命令)
飞询
2025/08/01
2970
Shell脚本语言基础
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
闫同学
2023/11/19
3000
一篇文章学懂Shell脚本
Shell可以直接使用在win/Unix/Linux上面,并且可以调用大量系统内部的功能来解释执行程序,如果熟练掌握Shell脚本,可以让我们操作计算机变得更加轻松,也会节省很多时间。
软测小生
2019/07/05
5380
一篇文章学懂Shell脚本
相关推荐
一行一行教你搞定 Shell 脚本基础,别再死记硬背了(第二章)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验