当前位置: 首页 > news >正文

Shell编程:轻松掌握入门级Shell脚本,成为Shell高手

文章目录

  • 前言
  • 一. 实验环境
  • 二. shell基础入门精讲
    • 2.1 什么是shell脚本?
    • 2.2 shell的种类
    • 2.3 脚本案例
      • 2.3.1 打印 hello-word案例
      • 2.3.2 统计指定目录下的文件数和目录数
    • 2.4 shell脚本编写规范
  • 总结

前言

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

一. 实验环境

  1. 服务器(操作系统是centos7.8)
[root@mufeng ~]# cat /etc/redhat-release 
CentOS Linux release 7.8.2003 (Core)
  1. 安装常用的工具
yum安装基本软件包  wget,vim,lrzsz,httpd-tools,net-tools

备注:

  • wget :非交互式的网络文件下载工具。
  • vim :文本编辑器工具,比vi的编辑功能更全面。
  • lrzsz :服务器的文件上传下载工具。
  • httpd-tools :Apache的ab压力测试命令工具。
  • net-tools :网络工具,常用于查看服务器端口,路由等网络服务信息。
  1. 关闭selinux和防火墙

在这里插入图片描述

二. shell基础入门精讲

2.1 什么是shell脚本?

Shell脚本是一种用来编写命令行脚本的脚本语言,也叫做Bash脚本,是运行在Unix/Linux操作系统的命令解释器(shell)中的一种脚本语言。

Shell脚本的主要作用是通过执行一系列的命令和程序,自动化完成一些繁琐或复杂的任务。

Shell脚本可以用来操作文件、目录、进程、网络、系统配置等,也可以用来完成一些日常工作中的自动化任务,例如备份文件、定时任务、批量处理数据等。

Shell脚本通常使用bash、sh、zsh等shell解释器来解释执行。

Shell脚本语言具有简单易学、灵活性强、可扩展性好等优点,是Unix/Linux系统下非常实用的工具之一

2.2 shell的种类

我们可以命令查看系统中的shell:

[root@mufeng ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
[root@mufeng ~]# 
  • Bourne shell(sh):Bourne shell是Unix操作系统最早的一种shell,由Stephen Bourne在1977年创建。它是其他许多shell的基础,包括Bash和Korn shell。

  • C shell(csh):C shell是类Unix操作系统中另一种流行的shell,由Bill Joy在20世纪80年代初创建。它的语法与C语言相似,包括命令行编辑功能,以及许多其他有用的特性。

  • Korn shell(ksh):Korn shell由David Korn在1983年创建,是Bourne shell的升级版。它包含了许多Bourne shell没有的特性,例如命令行编辑、历史记录和作业控制等。

  • Bourne-Again shell(bash):Bash是Linux系统中最常见的shell,是Bourne shell的一种升级版,由Brian Fox在1987年创建。它支持许多Bourne shell不支持的特性,包括命令行编辑、自动补全和历史记录等。

除了上述这些常见的shell之外,还有其他一些shell,例如:

  • Zsh:Zsh是一个功能强大的shell,它具有高度的可定制性和丰富的功能集。
    -Fish:Fish是一个易于使用和学习的shell,它提供了一些与其他shell不同的特性,例如语法高亮和自动建议等。
  • PowerShell:PowerShell是一个由Microsoft开发的shell和脚本语言,它主要用于Windows操作系统。

不同的Shell语言的语法有所不同,不能通用,最常用的shell是Bash,也就是Bourne Again Shell。Bash不仅易用,而且免费,因此被广泛使用,也是大多数Linux操作系统默认的Shell环境。
备注:若不清楚自己系统的shell类型,可以用echo $SHELL进行查看:

[root@mufeng ~]# echo $SHELL
/bin/bash

更多内容参见 csdn博客主页:我是沐风晓月

2.3 脚本案例

2.3.1 打印 hello-word案例

[root@mufeng shell]# vim hello-world.sh
#!/bin/bash
#2023年3月7日22:18:56
#This is my first shell
#By author mufeng 
#############################
echo “Hello World ”

hello-world.sh脚本内容详解:

  • #!/bin/bash 指定脚本要使用的 Shell 类型为 Bash 。
  • #! 被称为 Sha-bang ,或者 Shebang , Linux 会分析它之后的指令,并载入该指令作为解析器。
  • #2023年3月7日22:18:56 注明脚本编写的时间;
  • #This is my first shell 注明Shell脚本的用途;
  • #By author mufeng 注明脚本的作者;
  • echo “Hello World ” shell脚本主命令,执行该shell命令,会打印出“Hello World ”

执行脚本的方法:

编写完毕后,要赋予脚本执行的权限,然后运行。

授权使用命令 chmod

[root@mufeng shell]# chmod +x hello-world.sh 
[root@mufeng shell]# ll
总用量 4
-rwxr-xr-x 1 root root 134 37 22:22 hello-world.sh

执行方法1:赋予执行权限后,通过相对路径执行:

[root@mufeng shell]# ./hello-world.sh 
“Hello World ”

执行方法2: 赋予执行权限后,通过绝对/全路径的方式执行:

[root@mufeng ~]# /root/shell/hello-world.sh 
“Hello World ”

执行方法3:不需要执行权限,使用命令执行: /bin/sh hello-world.sh 或者sh hello-world.sh

[root@mufeng shell]# ll
总用量 4
-rw-r--r-- 1 root root 134 37 22:22 hello-world.sh
[root@mufeng shell]# /bin/sh hello-world.sh 
“Hello World ”
[root@mufeng shell]# sh hello-world.sh 
“Hello World ”

执行方法4:不需要执行权限,使用/bin/bash或者bash命令执行脚本

[root@mufeng shell]# /bin/bash hello-world.sh 
“Hello World ”
[root@mufeng shell]# bash hello-world.sh 
“Hello World ”

2.3.2 统计指定目录下的文件数和目录数

接下来我们引入一个脚本案例,在后面的学习中,我们都会学到,在这里抛砖引玉:

#!/bin/bash
## 本文首发于csdn,搜索[我是沐风晓月】if [ $# -eq 0 ]; thenecho "Usage: $0 directory"exit 1
fidir=$1if [ ! -d $dir ]; thenecho "Error: $dir is not a directory"exit 1
fifile_count=$(find $dir -type f | wc -l)
dir_count=$(find $dir -type d | wc -l)echo "Number of files in $dir: $file_count"
echo "Number of directories in $dir: $dir_count"

解释:

这个脚本接受一个目录作为参数,并统计该目录下的文件数和目录数。

首先,脚本检查是否有参数传递进来。如果没有,则输出用法信息并退出。如果有参数传递进来,则检查该目录是否存在。如果不存在,则输出错误信息并退出。

接着,脚本使用find命令查找目录下的所有文件和目录,并使用wc命令统计它们的数量。

最后,脚本输出文件数和目录数的信息。

本文首发于csdn,csdn搜索【我是沐风晓月】即可

2.4 shell脚本编写规范

通俗的讲,脚本就是一些命令语句堆叠在一起,为了实现某些功能的语句块文本。

编写规范的shell脚本可以提高代码的可读性、可维护性和可移植性

以下是一些常用的shell脚本编写规范:

  • 脚本名一般为英文、大写、小写开头;
  • 脚本名不要使用特殊符号、空格来命名;
  • Shell脚本后缀以.sh结尾;
  • Shell脚本名以功能命名,做到见名知意;
  • Shell脚本内容首行要定义脚本的Shell类型#!/bin/bash;
  • Shell脚本中的变量名称尽量使用大写字母,字母间不能使用“-”,可以使用“_”;
  • Shell脚本中的变量名称不要以数字、特殊符号开头。

其他规范:

  • 文件头部注释:脚本的开头应该包含一段注释,用来描述脚本的用途、作者、日期、修改历史等信息。

  • 指定解释器:脚本的第一行应该指定解释器,例如:#!/bin/bash,这样系统就会使用指定的解释器来解释脚本。

  • 变量命名规范:变量名应该使用小写字母,单词之间用下划线分隔,例如:my_var。

  • 命令输出规范:脚本中执行的命令应该将输出重定向到/dev/null或者日志文件中,例如:command >/dev/null 2>&1或者command >>/var/log/my_log 2>&1。

  • 函数命名规范:函数名应该使用小写字母,单词之间用下划线分隔,例如:my_function。

  • 参数检查规范:脚本中应该检查参数的数量和格式是否正确,例如:if [ $# -lt 2 ]; then echo “Usage: $0 arg1 arg2”; exit 1; fi。

  • 错误处理规范:脚本中应该处理各种可能的错误,例如:if ! command; then echo “Command failed”; exit 1; fi。

  • 缩进规范:使用2个空格作为缩进,而不是制表符。

  • 注释规范:注释应该清晰、简洁、明了,可以解释代码的用途、实现细节、特殊处理等。

  • 可读性规范:脚本应该具有良好的可读性,包括适当的空行、代码结构、代码对齐等。

  • 文件权限规范:脚本文件应该具有适当的文件权限,例如:chmod +x my_script.sh。

  • 可移植性规范:脚本应该尽可能具有良好的可移植性,避免使用依赖于特定平台或操作系统的特性和命令。

总结

以上是关于shell脚本的简单介绍,算是入门,接下来我们要进入到正式的学习咯。

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 博客主页:mufeng.blog.csdn.net
💕 本文由沐风晓月原创,首发于CSDN博客
💕 曾国藩说: 一书未完,不读其他

相关文章:

Shell编程:轻松掌握入门级Shell脚本,成为Shell高手

文章目录前言一. 实验环境二. shell基础入门精讲2.1 什么是shell脚本?2.2 shell的种类2.3 脚本案例2.3.1 打印 hello-word案例2.3.2 统计指定目录下的文件数和目录数2.4 shell脚本编写规范总结前言 🏠个人主页:我是沐风晓月 🧑个人…...

FastApi的搭建与测试

一、fastapi的安装 1-1、使用pip安装 安装fastapi的语句 pip install fastapi -i https://mirrors.aliyun.com/pypi/simple因为fastapi启动依赖于uvicorn,所以我们还需要安装uvicorn。 pip install uvicorn -i https://mirrors.aliyun.com/pypi/simple下面我们来…...

C++基础——C++面向对象之重载与多态基础总结(函数重载、运算符重载、多态的使用)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…...

调用一个函数时发生了什么?

欢迎来到 Claffic 的博客 💞💞💞 前言: 用C语言写代码,如果一个工程相对复杂时,我们往往会采取封装函数的方式。在主函数中调用函数 这一看似简单的过程,实际上有很多不宜观察的细节&#xff0…...

MindAR的网页端WebAR图片识别功能的图片目标编译器中文离线版本功能(含源码)

前言 之前制作了基于MindAR实现的网页端WebAR图片识别叠加动作模型追踪功能的demo,使用了在线的图像目标编译器对识别图进行了编译,并实现了自制的WebAR效果,大致效果如下: 但是在线的编译器在操作中也不是很方便,我…...

测试经理:“你做了三年测试,连服务端的接口测试都不会?”

服务端的接口测试我们一般从功能开始进行测试,比如请求参数和响应参数的校验,业务逻辑或业务规则的校验,数据库操作的校验。 功能正常后会根据需要进行安全相关的检查、性能测试以及系列扩展测试,比如与历史版本的兼容性测试、接…...

4G AFR到5G应用场景介绍

前面文章介绍过AFR的机制及流程 AFR机制及流程介绍 (qq.com) GSM AFR到LTE流程...

正电源子 IMX6ULL 自学笔记(驱动开发)

一、字符设备驱动开发 1.1 字符设备驱动简介 字符设备是 Linux 驱动中最基本的一类设备驱动,字符设备就是一个一个字节,按照字节流进行读写操作的设备,读写数据是分先后顺序的。比如我们最常见的点灯、按键、IIC、SPI,LCD 等等都…...

AM5728(AM5708)开发实战之移植OpenCV-3.4.11

一 概述 OpenCV是一个开源的跨平台计算机视觉库,可以运行在Linux、Windows、Mac OS等操作系统上,它为图像处理、模式识别、三维重建、物体跟踪、机器学习提供了丰富的算法。 由于OpenCV依赖包特别多,尽量不要使用交叉编译,即在什…...

Notepad++ 下载与安装教程

文章目录Notepad 下载与安装教程Notepad 简介一,Notepad 下载二,Notepad 安装Notepad 下载与安装教程 Notepad 简介 Notepad是程序员必备的文本编辑器,Notepad中文版小巧高效,支持27种编程语言,通吃C,C ,Java ,C#, XM…...

005+limou+HTML——(5)HTML图片和HTML超链接

1、图片标签<img> &#xff08;1&#xff09;图片标签属性 [src]&#xff1a;用于指定这个图片所在的路径&#xff0c;常使用相对路径&#xff0c;比较少使用绝对路劲。如果图片路径有错误的话&#xff0c;就会发生图片显示错误[alt]&#xff1a;用于指定图片的提示文字…...

ES6 Generator

Generator Generator是es6引入的&#xff0c;主要用于异步编程。 最大特点是可以交出函数的执行权(即暂停执行)。 它和普通的函数写法有点不同 function关键字与函数名之间有一个*号&#xff0c;以与普通函数进行区别。 它不同于普通函数&#xff0c;是可以暂停执行的。 Gen…...

SCI期刊写作必备(二):代码|手把手绘制目标检测领域YOLO论文常见的性能对比折线图,一键生成YOLOv7等主流论文同款图表,包含多种不同功能风格对比图表

绘制一个原创属于自己的YOLO模型性能对比图表 具体绘制操作参考:(附Python代码,直接一键生成,精度对比图表代码 ) 只需要改动为自己的mAP、Params、FPS、GFlops等数值即可,一键生成 多种图表风格📈,可以按需挑选 文章目录 绘制一个原创属于自己的YOLO模型性能对比图…...

linux cpu飙高排查

linux定位cpu飙高原因 jpstop 定位应用进程 pidtop -Hp {pid}找到线程 tid将 tid 转换成十六进制 printf “%x\n” {tid}jstack 打印堆栈信息过滤出我们想要的 jpstop 定位应用进程 pid jps或ps -ef | grep java查看java进程id jps结果&#xff1a; 57152 abc.jar 83383 e…...

2023实习面试公司【二】

2023实习面试第二家公司 文章目录2023实习面试第二家公司前言一、面试官所问的问题&#xff1f;二、总结1.公司待遇2.推荐指数3.自己的感受前言 某岸科技&#xff0c;这家公司是我从拉钩上找的第二家面试公司&#xff0c;也是北京本地的一家公司。 提示&#xff1a;以下是本篇…...

C++ thread_local 存储类

目录标题概述实现场景总结概述 thread_local指示对象拥有线程存储期。也就是对象的存储在线程开始时分配&#xff0c;而在线程结束时解分配。每个线程拥有其自身的对象实例。唯有声明为 thread_local 的对象拥有此存储期。 thread_local 能与 static 或 extern 结合一同出现&am…...

冥想第七百二十三天

1.周日早上跑了5公里&#xff0c;很舒服精力满满的&#xff0c;感谢老婆给我做的饭&#xff0c;鱿鱼面筋腐竹。都非常的好吃。 2.下午13&#xff1a;19分送我到了地铁口&#xff0c;这个点卡的真好&#xff0c;以至于离高铁开车只剩5分钟&#xff0c;14&#xff1a;41发车。到上…...

zookeeper 集群配置

文章目录zookeeper 集群配置1、集群安装zookeeper 集群配置 1、集群安装 1) 集群安装 在 hadoop102、hadoop103 和 hadoop104 三个节点上都部署 Zookeeper。 2) 解压安装 在 hadoop102 解压 Zookeeper 安装包到/opt目录下 输入命令&#xff1a;tar -zxvf apache-zookeeper-3.…...

怎么用消息队列实现分布式事务?

当消息队列和事务联系在一起时&#xff0c;它指的是消息生产者和消息消费者之间如何保持数据一致性。 什么是分布式事务&#xff1f; 事务是指当我们进行若干项数据更新操作时&#xff0c;为了保证数据的完整性和一致性&#xff0c;我们希望这些更新操作要么都成功&#xff0…...

什么蓝牙耳机佩戴舒适?2023长时间佩戴最舒适的蓝牙耳机

现如今&#xff0c;很多蓝牙耳机的产品都在不断地更新&#xff0c;市面上的耳机也是越来越普及&#xff0c;可以说是成为我们日常生活中不可或缺的一类电子设备&#xff0c;下面介绍一些佩戴舒适性好的蓝牙耳机。 一、南卡小音舱蓝牙耳机 音质推荐指数&#xff1a;★★★★★…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...