linux教程进阶:shell脚本入门到服务部署实战案例

admin linux教程 4


是不是很多朋友用 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”,也是进步,加油!

标签: 大错特错 一目了然

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~