是不是很多朋友用 Linux 时都遇到过这些麻烦?“部署服务要输十几条命令,每次都要对照笔记怕漏步骤”“重复备份文件、清理日志,手动做又累又容易错”“想批量处理文件,一个个操作到半夜”?别慌,这些问题用 shell 脚本都能解决。新手如何快速掌握 shell 脚本,从重复劳动中解放出来?其实 shell 脚本就是把 Linux 命令按顺序写进文件,让电脑自动执行,今天兔子哥就带大家从入门到实战,用脚本搞定服务部署,一起往下看吧!
先说说:shell 脚本到底是啥?为啥学它能省时间?
很多人觉得 “会 Linux 命令就行了,学脚本没必要”,其实大错特错。手动输命令适合单次操作,遇到重复任务或复杂流程,脚本的优势就显出来了。比如部署一个 Web 服务,手动要装软件、改配置、启动服务、设开机启动,至少 10 步;写个脚本,一键运行全搞定,还不会漏步骤。
手动操作 vs 脚本操作,差距一目了然
| 场景 | 手动操作 | shell 脚本操作 | 效率提升 |
|---|---|---|---|
| 每日日志清理 | 手动输rm -rf /var/log/*.log | 写脚本定时执行,加判断避免误删 | 从 5 分钟到 10 秒 |
| 服务部署 | 一步步输命令,记不住还要查笔记 | 脚本里写全步骤,一键运行 | 从 30 分钟到 2 分钟 |
| 批量文件重命名 | 一个个mv命令,改到眼花 | 脚本循环处理,一行命令搞定 | 从 1 小时到 1 分钟 |
做运维的小张说:“以前部署服务器,每次都要花半小时核对步骤,自从学了 shell 脚本,写好脚本后每次部署只要 5 分钟,还从没错过步骤。” 所以学 shell 脚本不是加分项,是提升效率的必备技能。
入门基础:写第一个 shell 脚本,3 步就能跑起来
别被 “脚本” 吓到,它就是个存命令的文本文件,比想象中简单。跟着这几步,新手也能写出能运行的脚本。
步骤 1:创建脚本文件,格式要正确
打开终端,用
vim test.sh创建文件(.sh 是脚本后缀,方便识别)。开头必须写#!/bin/bash,告诉电脑用 bash 解释器执行这个脚本,这行叫 “shebang”,少了它脚本可能跑不了。步骤 2:写命令,按顺序排好
比如写个备份文档的脚本,在 test.sh 里输:
bash
#!/bin/bash# 这是注释,说明脚本作用:备份文档文件夹echo "开始备份文档..." # echo用来打印提示信息cp -r ~/文档 ~/文档备份_$(date +%Y%m%d) # 复制文档到带日期的备份文件夹echo "备份完成!备份文件在~/文档备份_$(date +%Y%m%d)"注释用
#开头,方便自己和别人看懂脚本;$(date +%Y%m%d)会自动生成当天日期,让备份文件名不重复,这个小技巧超实用。步骤 3:加执行权限,运行脚本
脚本写好后,默认没有执行权限,输
chmod +x test.sh给权限(x 就是执行权限)。然后输./test.sh运行,看到 “开始备份” 和 “备份完成” 的提示,去目录里看看,是不是多了个带日期的备份文件夹?恭喜,你的第一个脚本成功了!核心语法:这几个知识点学会,脚本能做更多事
入门后想学复杂脚本,得掌握变量、条件判断、循环这几个核心语法,不难但必须会。
变量:给数据起名字,方便复用
变量就像装命令或数据的盒子,定义时
变量名=值(等号前后别空格),用的时候加$。比如:bash
#!/bin/bashbackup_dir="~/文档备份" # 定义备份目录变量today=$(date +%Y%m%d) # 定义日期变量echo "备份到:$backup_dir_$today" # 用$调用变量变量名别用特殊符号,推荐用小写字母加下划线,比如
log_path,自己看着明白就行。条件判断:让脚本有 “判断能力”
用
if语句让脚本根据条件做事,比如判断文件是否存在:bash
#!/bin/bashfile="test.txt"if [ -f "$file" ]; then # 判断是否是普通文件echo "$file 存在,开始处理"elseecho "$file 不存在,创建文件"touch "$file" # 不存在就创建fi # if语句结束必须加fi注意
[ ]前后要有空格,不然会报错,这是新手最容易踩的坑。常见判断条件:-f文件存在、-d文件夹存在、-z变量为空,记不住就写在脚本注释里。循环:重复操作省力气
用
for循环批量处理,比如批量重命名文件:bash
#!/bin/bash# 给所有.txt文件加前缀"backup_"for file in *.txt; do # 循环当前目录的.txt文件mv "$file" "backup_$file" # 重命名done # 循环结束把脚本放有 txt 文件的目录运行,看看文件名是不是都加上前缀了?循环特别适合批量任务,不用手动一个个操作。
实战案例:用脚本部署 Nginx 服务,一键搞定
学了基础语法,咱们来个实用案例:写脚本自动部署 Nginx 服务,包含安装、改配置、启动、设开机启动,以后部署新服务器直接用。
脚本代码:一步步解析
创建
install_nginx.sh,输入:bash
#!/bin/bash# Nginx自动部署脚本,适合CentOS/Ubuntu# 检查是否是root用户,非root可能没权限if [ $USER != "root" ]; thenecho "请用root用户运行!输sudo -i切换"exit 1 # 非root就退出fi# 安装Nginx,区分CentOS和Ubuntuif [ -f /etc/redhat-release ]; then # 判断是CentOSyum install -y nginx # CentOS用yumelse # 否则默认是Ubuntuapt update -yapt install -y nginx # Ubuntu用aptfi# 启动服务并设开机启动systemctl start nginxsystemctl enable nginx # 开机自启# 检查是否启动成功if systemctl is-active --quiet nginx; thenecho "Nginx部署成功!访问服务器IP就能看到默认页"elseecho "部署失败,检查日志:journalctl -u nginx"fi运行脚本,看效果
给权限:
chmod +x install_nginx.sh运行:
./install_nginx.sh脚本会自动判断系统、装软件、启动服务,全程不用手动干预。运行完用
systemctl status nginx检查,显示 “active (running)” 就成功了,是不是比手动一步步输命令快多了?避坑指南:新手写脚本常踩的 5 个坑,这样解决
1. 脚本运行提示 “Permission denied”
没给执行权限!输
chmod +x 脚本名.sh就行,新手常忘这步,记得写完脚本先加权限。2. 变量调用时没加$,结果不对
比如定义了
name="test",用的时候写成echo name,会打印 “name” 而不是 “test”,必须加$:echo $name。3. if语句报错 “syntax error near unexpected token `then'”
[ ]前后没加空格!正确写法是if [ 条件 ]; then,比如if [ -f "file.txt" ]; then,括号和条件之间必须有空格。4. 脚本里有中文注释,运行乱码或报错
Ubuntu 默认支持中文,但有些老系统可能不兼容。解决方法:脚本开头加
export LANG="zh_CN.UTF-8",或用英文注释,简单直接。5. 循环处理文件时,文件名含空格导致错误
比如文件名叫 “my file.txt”,
for file in *.txt会分成 “my” 和 “file.txt”,处理出错。解决方法:用for file in ./*.txt,或加引号"$file"。自问自答:学 shell 脚本常见问题
问:学脚本需要先精通 Linux 命令吗?
答:不用精通,但基础命令得会!至少要懂
cd ls cp mv apt/yum这些常用命令,脚本本质是命令的组合,命令都不会,脚本也写不出来。新手可以边学命令边练脚本,互相促进。问:脚本写复杂了会出错,有没有调试技巧?
答:有!在脚本开头加
set -x,运行时会显示每步执行的命令和结果,方便找错;或者用bash -x 脚本名.sh运行,临时开启调试模式,不用改脚本内容。问:除了部署服务,脚本还能做啥?
答:太多了!定时备份数据库、监控系统负载(高了发邮件提醒)、批量创建用户、日志分析统计…… 只要是重复的、有规律的操作,都能用脚本自动化。兔子哥甚至见过用脚本自动生成日报的,简直是摸鱼神器。
个人心得:写脚本别怕错,多改几次就顺了
兔子哥刚开始写脚本,一个简单的备份脚本都改了 5 次:忘加执行权限、变量没加
$、if语句少空格,每次报错都以为自己学不会。但逼着自己查错误、改脚本,写第三个脚本时就顺手多了。其实 shell 脚本的核心是 “把手动步骤翻译成命令,让电脑按顺序执行”,不用追求高深语法,能解决实际问题的就是好脚本。新手可以从简单任务开始,比如先写个清理日志的脚本,再慢慢加条件判断、循环,循序渐进。
别觉得 “我不是运维,学脚本没用”,现在连开发、测试都需要懂点脚本提高效率。花一天时间入门,以后能省无数个小时,这笔时间账太值了。现在就打开终端,写个简单的脚本试试,哪怕只是打印一句 “Hello Shell”,也是进步,加油!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~