一文讲清ShellScript脚本编程知识
liuian 2025-06-23 20:37 3 浏览
摘要:本文详尽地讲述了 Shell Script 的基础内容,还有它在 Linux 系统里的运用情况,涵盖了它的基本语法、常用的命令以及高级的功能。Shell Script 可是一种简单又非常实用的编程语言,能够凭借一连串的命令和语句,把任务自动化,让操作变得简单。
文章从 Shell Script 的定义和用处讲起,解释了怎样编写和运行脚本的应用实例,还深入地研究了 Linux 脚本编程的各种各样的应用场景。不管是用在日常任务的自动化上,还是复杂系统的管理中,Shell Script 都显示出了它在 Linux 环境里广泛的适用性和强大的实用性。
文章首先说明了 Shell Script 当作自动化工具的作用,能够通过一系列命令和语句让操作变简单、把效率提上去。接着,文章又系统地讲解了 Shell Script 的基本语法,像变量定义、字符串处理、条件判断、循环语句、函数、数组这些内容,并且通过实例展示了怎么编写和运行脚本。另外,还讲了 Shell Script 在文件操作、权限管理、文本处理、网络操作等方面的实用功能。文章尤其着重强调了调试模式、错误处理和定时任务的实现办法,帮助用户更有效地管理脚本执行。最后,通过一些常见的应用场景,比如自动备份、文本搜索和进程管理,展现了 Shell Script 在日常工作里强大的实用性。不管是刚开始学的人,还是有经验的开发者,都能从这里掌握 Shell Script 的核心知识,并且用到实际工作当中。
一、Linux环境
1.访问Linux系统
2.查看Shell版本信息
说明:查看Shell版本信息的方法取决于Linux系统使用的具体Shell类型。不同的Shell,比如Bash、Tcsh、Fish等,有不同的命令来查看其版本信息。不过Linux常用的Shell主要是Bash。
(1)查看Linux系统的Shell类型
(2)查看Shell的版本信息
二、ShellScript脚本知识
说明:Shell Script是一种在Linux系统中编写脚本的工具,主要用于自动化任务和简化操作。Shell Script文件扩展名通常是.sh。
1. ShellScript脚本的基本结构
备注:上述脚本程序说明如下
第一行 | 程序通常以#!/bin/bash开头,表示用bash解释器来运行脚本。 |
命令 | 可以是系统命令(如ls、pwd)、Shell内置命令,或者自定义的函数。 |
注释 | 用#开头的内容是注释,不会被执行。 |
2. ShellScript脚本的变量和字符串
说明:在ShellScript中,变量用于存储数据,无需声明类型,直接赋值即可使用,而字符串是基本的数据类型之一,可以使用单引号或双引号界定,其中双引号内的特殊字符可通过转义符处理,且支持变量替换。
备注:上述脚本那说明如下
定义变量 | 直接写变量名=值,比如name="Jason"。 |
使用变量 | 用$变量名,比如echo $name。 |
字符串 | 单引号:内容原样输出,比如'Hello $name'。 |
双引号:会解析变量,比如"Hello $name"。 |
3. ShellScript脚本的条件语句
说明:ShellScript脚本程序主要使用if、then、else、fi来写条件判断。
(1)执行指令# vim condition.sh编写条件判断脚本程序
(2)执行指令# sh condition.sh运行条件判断语句
4. ShellScript脚本的循环语句
说明:ShellScript脚本程序的循环语句主要有for语句和while语句两种,
(1) for循环:遍历一组值
执行指令# vim for.sh编写for脚本程序
执行指令# sh for.sh运行for脚本程序
(2) while循环:当条件为真时执行
执行指令# vim while.sh编写一个简单while循环脚本程序
执行指令# sh while.sh运行程序
5. ShellScript脚本的函数
说明:在ShellScript中,函数是一种将代码块组织起来以便重复使用的机制,通过function_name() { ... }定义,并可通过其名称后跟随括号及参数列表来调用执行。
(1)执行指令# vim function.sh定义一个函数
(2)执行指令# sh function.sh运行函数
6. ShellScript脚本的数组
说明:在ShellScript中,数组是一系列值的集合,可以通过索引访问各个元素,定义方式为array_name=(value1 value2 ...),并支持通过${array_name[index]}访问特定元素或使用${array_name[@]}获取所有元素。
定义数组 | arr=(值1 值2 值3)。 |
访问元素 | ${arr[索引]},索引从0开始。 |
7. ShellScript脚本的命令行参数
说明:在ShellScript中,命令行参数是传递给脚本的输入数据,可以通过特殊变量如$1、$2...$n访问各个参数值,以及使用$#获取参数数量、$@获取所有参数列表。
$0 | 脚本名 |
$1、$2……$n | 传递给脚本的参数 |
8. ShellScript脚本的调试和错误处理
说明:在ShellScript中,调试和错误处理可以通过设置-x选项来追踪脚本执行过程,利用if条件判断和$?获取上一条命令的退出状态来进行错误检测与处理。
调试模式 | 用set -x开启,set +x关闭。 |
错误捕获 | 用trap命令处理错误。 |
9. ShellScript脚本的输入和输出
说明:在ShellScript中,输入输出通过标准命令如echo和read实现,分别用于向终端输出信息和从用户接收输入,同时可以使用重定向符号>、<及管道|来控制数据流的方向和处理方式。
备注:ShellScript脚本的输入输出实例说明如下
读取输入 | 用read命令。 |
输出信息 | 用echo命令。 |
10. ShellScript脚本的文件操作
说明:在ShellScript中,文件操作可以通过命令如cat、echo、read、cp、mv和rm等进行,实现文件的读取、写入、复制、移动及删除等功能,并利用重定向和管道机制来处理文件内容。
11. ShellScript脚本的权限管理
说明:在ShellScript中,权限管理可通过chmod命令修改文件或脚本的执行权限,使用chown改变文件所有者,以及利用sudo命令以超级用户权限执行特定操作,确保资源安全访问与控制。
权限 | 权限类别 | 八进制模式 |
读 | r | 4 |
写 | w | 2 |
执行 | x | 1 |
12. ShellScript脚本的文本处理
说明:在ShellScript中,文本处理可以通过工具如grep搜索文本模式、sed进行流编辑、awk处理和分析文本数据,以及利用cut、paste等命令来抽取或合并文本内容。
grep | 搜索文本。 |
sed | 替换文本。 |
awk | 处理文本。 |
13. ShellScript脚本的定时任务
说明:在ShellScript中,定时任务可以通过cron作业设置,使用特定格式定义执行时间,从而定期自动运行脚本或命令,实现任务的自动化调度。
* * * * * command | |
第一个* | 代表分钟 (0 - 59) |
第二个* | 代表小时 (0 - 23) |
第三个* | 代表日期 (1 - 31) |
第四个* | 代表月份(1 - 12) |
第五个* | 星期几 (0 - 7) (星期天=0或7) |
14. ShellScript脚本的网络操作
说明:在ShellScript中,网络操作可以通过命令如curl或wget进行数据下载和与Web服务交互,使用ping检查网络连接,通过ssh进行远程服务器登录及执行命令,以及利用netstat、ss等工具监控网络状态。
三、ShellScript脚本实例
说明:这是一个使用Shell Script脚本实现自动搜索文本并备份的示例程序。
1.执行指令# vim grep_backup.sh编写脚本程序
2.执行指令# sh grep_backup.sh运行脚本程序
3.查看程序执行后的情况
备注:上述脚本程序的功能说明如下
(1)目录检查:确保用户输入的搜索目录存在。
(2)动态输入:用户可以灵活指定搜索目录、关键字和备份目录。
(3)备份文件命名:备份文件名包含时间戳,避免覆盖。
相关推荐
- 谷歌Gemini 2.5全线爆发!勇战濒死恐慌,却被宝可梦吓到当场宕机
-
编辑:定慧桃子【新智元导读】今天,谷歌旗舰Gemini2.5三箭齐发,首次亮相轻量版2.5Flash-Lite。最新70页技术报告中,爆料了Gemini2.5在玩宝可梦濒死时,惊现类人的恐慌,...
- Claude 4系列模型正式发布,号称“世界上最好的”AI编程模型
-
当地时间5月22日,Anthropic在其首次开发者大会上,正式发布了其下一代Claude模型系列:ClaudeOpus4和ClaudeSonnet4。该公司在公告中高调宣称,...
- p5.js 中文入门教程(p5js和js怎么转换)
-
本文简介点赞+关注+收藏=学会了本文的目标是和各位工友一起有序的快速上手p5.js,会讲解p5.js的基础用法。本文会涉及到的内容包括:项目搭建p5.js基础2D图形文字图形样式...
- ElasticSearch中文分词插件(IK)安装
-
坚持原创,共同进步!请关注我,后续分享更精彩!!!前言ElasticSearch默认的分词插件对中文支持很不友好。一段话按规则会以每个中文字符来拆解,再分别建立倒排索引。如"中华人民共和国国歌...
- ELK 教程 - 发现、分析和可视化你的数据
-
【注】本文译自:ELKStackTutorial-GettingStartedWithELKStack|Edureka随着越来越多的IT基础设施转身云计算,对公共云安全工具...
- 网络安全事件技术排查(网络安全事件排查有哪些因素)
-
1.文件分析a)文件日期与异常文件检测文件时间检查:Windows:通过文件属性查看创建/修改时间,但需注意攻击者可能伪造时间(如使用工具修改文件时间戳)。Linux:使用ls-l或sta...
- 日志文件转运工具Filebeat笔记(日志文件生成原理)
-
一、概述与简介Filebeat是一个日志文件转运工具,在服务器上以轻量级代理的形式安装客户端后,Filebeat会监控日志目录或者指定的日志文件,追踪读取这些文件(追踪文件的变化,不停的读),并将来自...
- Spring Boot 分布式系统中的日志打印设计:实战指南
-
在分布式系统中,日志是排查问题、监控系统状态和进行事后分析的“生命线”。然而,随着微服务架构的普及,日志的管理和检索变得愈发复杂。尤其是在生产环境中,当问题发生时,如何快速定位相关日志成为了一个关键挑...
- Loki日志系统取代ELK?(日志系统 elk)
-
一、Loki是什么?Loki是由GrafanaLabs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用...
- 20 个最热门的 MCP Server,收藏备用!
-
1.GitHubMCPServer功能:代码仓库管理、自动化代码审查、处理拉取请求(PR)、Issue跟踪。项目地址:https://docs.github.com/en/rest核心架构:基于...
- ElasticSearch实现数据模糊搜索(el-select模糊搜索)
-
关注我的微信公众号:后端技术漫谈不定期推送关于后端开发、爬虫、算法题、数据结构方面的原创技术文章,以及生活中的逸闻趣事。我目前是一名后端开发工程师。主要关注后端开发,数据安全,网络爬虫,物联网,边缘计...
- Linux 日志系统维护的实战示例(linux 日志文件系统)
-
Linux日志系统维护的实战示例,涵盖常见场景和工具:1.日志轮转与清理(Logrotate)问题:系统/var/log空间不足,需定期切割和清理旧日志。实战步骤:检查默认配置Logrotat...
- 日志分析平台——ELK安装配置(elk日志解析)
-
简介:ELK是(Elasticsearch、Logstash、Kibana)三个软件的集合简称。那么这三个软件分别扮演着一个什么样的角色呢?Elasticsearch:搜索引擎,主要任务是将日志索引并...
- Docker上使用Elasticsearch,Logstash,Kibana
-
在对一个项目做性能测试时我需要处理我们web服务器的访问日志来分析当前用户的访问情况。因此,我想这是试用ELK的一个好机会。ELK栈首先要注意的是使用它是非常简单的。从决定使用ELK到在本机上搭一个...
- .NET Core 性能监控(.net core性能对比)
-
一、.NETCore性能监控的重要性随着.NETCore应用程序的广泛应用,性能监控成为了保障应用稳定运行的关键环节。性能监控可以帮助开发者实时掌握应用状态,快速定位问题所在,并采取相应的...
- 一周热门
-
-
Python实现人事自动打卡,再也不会被批评
-
Psutil + Flask + Pyecharts + Bootstrap 开发动态可视化系统监控
-
【验证码逆向专栏】vaptcha 手势验证码逆向分析
-
一个解决支持HTML/CSS/JS网页转PDF(高质量)的终极解决方案
-
再见Swagger UI 国人开源了一款超好用的 API 文档生成框架,真香
-
网页转成pdf文件的经验分享 网页转成pdf文件的经验分享怎么弄
-
C++ std::vector 简介
-
python使用fitz模块提取pdf中的图片
-
《人人译客》如何规划你的移动电商网站(2)
-
Jupyterhub安装教程 jupyter怎么安装包
-
- 最近发表
- 标签列表
-
- python判断字典是否为空 (50)
- crontab每周一执行 (48)
- aes和des区别 (43)
- bash脚本和shell脚本的区别 (35)
- canvas库 (33)
- dataframe筛选满足条件的行 (35)
- gitlab日志 (33)
- lua xpcall (36)
- blob转json (33)
- python判断是否在列表中 (34)
- python html转pdf (36)
- 安装指定版本npm (37)
- idea搜索jar包内容 (33)
- css鼠标悬停出现隐藏的文字 (34)
- linux nacos启动命令 (33)
- gitlab 日志 (36)
- adb pull (37)
- table.render (33)
- uniapp textarea (33)
- python判断元素在不在列表里 (34)
- python 字典删除元素 (34)
- vscode切换git分支 (35)
- python bytes转16进制 (35)
- grep前后几行 (34)
- hashmap转list (35)