每天分享技术栈,开发工具等
文章篇幅较长,建议收藏+转发,慢慢啃!只要认真跟着练,保证你能学会 Shell 脚本,脱离“看得懂却写不出”的尴尬!
你是不是也听说过 Shell 脚本很重要?
你是不是也尝试看过几篇博客、视频,感觉懂了,但真让你写一个脚本,又开始挠头?
我以前就是那种“死记硬背一堆命令+if判断”的人,结果还是不会写。后来我换了一种方式——「一行一行去理解、去写、去调试」。
这篇文章,我不讲虚的,就从最基础的 #!/bin/bash
开始,一步一步带你写出自己的第一个 Shell 脚本。就算你现在一点都不懂 Linux,也能看懂!
本文环境:
#!/bin/bash
echo"你好,Shell 脚本!"
这一段你可以直接复制进一个文件里,比如:
vim hello.sh
然后把上面的内容贴进去,保存退出。
接着让它可以执行:
chmod +x hello.sh
最后执行它:
./hello.sh
你会看到输出:
你好,Shell 脚本!
这一刻,你已经写出了你的第一个 Shell 脚本,别小看它,它比你手动敲命令强多了。
什么是变量?你可以把它当成“一个代号”,我们来试试:
#!/bin/bash
name="小白DBA"
echo"你好,$name"
保存为 var.sh
,加权限,执行试试。
重点来了:
name="小白DBA"
赋值不能有空格!echo "你好,$name"
双引号里可以展开变量echo '你好,$name'
,变量不会被替换哦最常见的场景,比如判断文件是否存在:
#!/bin/bash
if [ -f /etc/passwd ]; then
echo"文件存在"
else
echo"文件不存在"
fi
说明:
-f
是判断文件是否存在且为普通文件[]
是条件测试,里面记得两边要有空格then
和 fi
是 Shell 的标志性写法(fi = if 的反着)再比如用户输入判断:
#!/bin/bash
read -p "请输入你的名字:" yourname
if [ "$yourname" == "root" ]; then
echo"你好,管理员!"
else
echo"你好,$yourname"
fi
我们写个脚本,一次性 ping 多个主机:
#!/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 的详细内容把常用逻辑封装起来,反复用:
#!/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
表示第一个参数#!/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
是静默模式,不输出内容你可以让脚本接收外部参数,例如:
#!/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
:
bash -x myscript.sh
这样会显示每一步执行过程,变量展开也能看到,超级有用!
还可以手动在脚本中加入:
set -x # 开始调试
set +x # 关闭调试
「接下来怎么学?」
建议你试着写几个自己的小脚本,比如:
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有