一文讲清ShellScript脚本编程知识
wptr33 2025-07-03 20:22 26 浏览
摘要:本文详尽地讲述了 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)备份文件命名:备份文件名包含时间戳,避免覆盖。
相关推荐
- MySQL进阶五之自动读写分离mysql-proxy
-
自动读写分离目前,大量现网用户的业务场景中存在读多写少、业务负载无法预测等情况,在有大量读请求的应用场景下,单个实例可能无法承受读取压力,甚至会对业务产生影响。为了实现读取能力的弹性扩展,分担数据库压...
- 3分钟短文 | Laravel SQL筛选两个日期之间的记录,怎么写?
-
引言今天说一个细分的需求,在模型中,或者使用laravel提供的EloquentORM功能,构造查询语句时,返回位于两个指定的日期之间的条目。应该怎么写?本文通过几个例子,为大家梳理一下。学习时...
- 一文由浅入深带你完全掌握MySQL的锁机制原理与应用
-
本文将跟大家聊聊InnoDB的锁。本文比较长,包括一条SQL是如何加锁的,一些加锁规则、如何分析和解决死锁问题等内容,建议耐心读完,肯定对大家有帮助的。为什么需要加锁呢?...
- 验证Mysql中联合索引的最左匹配原则
-
后端面试中一定是必问mysql的,在以往的面试中好几个面试官都反馈我Mysql基础不行,今天来着重复习一下自己的弱点知识。在Mysql调优中索引优化又是非常重要的方法,不管公司的大小只要后端项目中用到...
- MySQL索引解析(联合索引/最左前缀/覆盖索引/索引下推)
-
目录1.索引基础...
- 你会看 MySQL 的执行计划(EXPLAIN)吗?
-
SQL执行太慢怎么办?我们通常会使用EXPLAIN命令来查看SQL的执行计划,然后根据执行计划找出问题所在并进行优化。用法简介...
- MySQL 从入门到精通(四)之索引结构
-
索引概述索引(index),是帮助MySQL高效获取数据的数据结构(有序),在数据之外,数据库系统还维护者满足特定查询算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构...
- mysql总结——面试中最常问到的知识点
-
mysql作为开源数据库中的榜一大哥,一直是面试官们考察的重中之重。今天,我们来总结一下mysql的知识点,供大家复习参照,看完这些知识点,再加上一些边角细节,基本上能够应付大多mysql相关面试了(...
- mysql总结——面试中最常问到的知识点(2)
-
首先我们回顾一下上篇内容,主要复习了索引,事务,锁,以及SQL优化的工具。本篇文章接着写后面的内容。性能优化索引优化,SQL中索引的相关优化主要有以下几个方面:最好是全匹配。如果是联合索引的话,遵循最...
- MySQL基础全知全解!超详细无废话!轻松上手~
-
本期内容提醒:全篇2300+字,篇幅较长,可搭配饭菜一同“食”用,全篇无废话(除了这句),干货满满,可收藏供后期反复观看。注:MySQL中语法不区分大小写,本篇中...
- 深入剖析 MySQL 中的锁机制原理_mysql 锁详解
-
在互联网软件开发领域,MySQL作为一款广泛应用的关系型数据库管理系统,其锁机制在保障数据一致性和实现并发控制方面扮演着举足轻重的角色。对于互联网软件开发人员而言,深入理解MySQL的锁机制原理...
- Java 与 MySQL 性能优化:MySQL分区表设计与性能优化全解析
-
引言在数据库管理领域,随着数据量的不断增长,如何高效地管理和操作数据成为了一个关键问题。MySQL分区表作为一种有效的数据管理技术,能够将大型表划分为多个更小、更易管理的分区,从而提升数据库的性能和可...
- MySQL基础篇:DQL数据查询操作_mysql 查
-
一、基础查询DQL基础查询语法SELECT字段列表FROM表名列表WHERE条件列表GROUPBY分组字段列表HAVING分组后条件列表ORDERBY排序字段列表LIMIT...
- MySql:索引的基本使用_mysql索引的使用和原理
-
一、索引基础概念1.什么是索引?索引是数据库表的特殊数据结构(通常是B+树),用于...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
Java面试必考问题:什么是乐观锁与悲观锁
-
如何将AI助手接入微信(打开ai手机助手)
-
redission YYDS spring boot redission 使用
-
SparkSQL——DataFrame的创建与使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)