当前位置: 首页 > 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;★★★★★…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...