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

news2025/1/31 11:30:37

文章目录

  • 前言
  • 一. 实验环境
  • 二. 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 ]; then
    echo "Usage: $0 directory"
    exit 1
fi

dir=$1

if [ ! -d $dir ]; then
    echo "Error: $dir is not a directory"
    exit 1
fi

file_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博客
💕 曾国藩说: 一书未完,不读其他

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/396541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务架构(小白教学1)

相信大家吃饭的时候肯定是很苦恼打饭之慢,在自己饥肠辘辘的时候,面对自己喜欢吃的食物窗口却如同有百万大军虎视眈眈,自己内心的煎熬可想而知有时候在想这么美味的食物,为什么窗口就只开一个呢?于是你告诉了你的爸爸&a…

浅谈运维工程师的开发能力的培养

写在前面 本文已获得作者授权,作者的博客地址:https://www.cuiliangblog.cn/ 原文链接:浅谈运维工程师的开发能力的培养 一、运维工程师发展路线 1. 传统运维 侧重点是解决具体的问题。要求具备扎实的底层的知识储备,如网络、l…

安卓 Frament + ViewPager使用示例

1. 组成架构 整个架构被包在一个外部Fragment之中,也可以放在一个Activity之中,随意。外部的fragment包含了两个组件,即途中的ViewPager和TabLayoutViewPager要套上一个FragmentStatePagerAdapter ,适配器负责new出一个个fragment…

基于Jetson NX的模型部署

系统安装 系统安装过程分为3步: 下载必要的软件及镜像 Jetson Nano Developer Kit SD卡映像 https://developer.nvidia.com/jetson-nano-sd-card-image Windows版SD存储卡格式化程序 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 镜像烧录工具…

嵌入式C语言九大数据结构操作方式详解

在C语言的开发过程中,灵活使用数据结构,对提高编程效率有极大的帮助。 目录 1 数组 2 链表 3 跳表 4 栈 5 队列 6 树 7 堆 8 散列表 9 图 10 总结 数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据…

【C++、C++11】列表初始化、右值引用

文章目录📖 前言1. 统一的列表初始化1.1 { } 花括号初始化:1.2 std::initializer_list:2. 右值引用2.1 什么是左值和右值:2.2 右值的分类:2.3 左值引用和右值引用的比较2.3 右值的使用场景:2.4 新的类功能&…

SpringBoot整合Quartz以及异步调用

文章目录前言一、异步方法调用1、导入依赖2、创建异步执行任务线程池3、创建业务层接口和实现类4、创建业务层接口和实现类二、测试定时任务1.导入依赖2.编写测试类,开启扫描定时任务3.测试三、实现定时发送邮件案例1.邮箱开启IMAP服务2.导入依赖3.导入EmailUtil4.编…

为「IT女神勋章」而战

大家好,我是空空star,今天为「IT女神勋章」而战 文章目录前言一、IT女神勋章二、绘制爱心1.htmlcssjs来源:一行代码代码效果2.python来源:C知道代码效果3.go来源:复制代码片代码效果4.java来源:download代码…

游戏算法-游戏AI状态机,python实现

AI概述 游戏AI是对游戏内所有非玩家控制角色的行为进行研究和设计,使得游戏内的单位能够感知周围环境,并做出相应的动作表现的技术。游戏AI作为游戏玩法的一大补充,在各种游戏中都有广泛的应用,比如可以和玩家交互聊天的NPC&#…

用户体验设计—影响定制化设计的因素

0 前言最近在上信息构建这门课(名为信息构建,但感觉叫用户体验设计更好。。。)老师是研究信息行为、人智交互这块的,所以实验课要求我们先学习一个实际的设计案例,让我们搞懂影响定制化设计的因素。所以这篇文章讲讲我…

七色电子标签

机种名 电子会议桌牌 型号 ESL_7color_7.3_D 外观尺寸 176.2x137.15x80mm 产品重量 268g 可视区域 163.297.92mm 外观颜色 银色 供电方式 锂电池供电2300mAh(Type-C 接口可充电) 显示技术 E-INK电子纸,双屏 像素 800x480 像…

ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读

ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读 文章目录ByteTrack: Multi-Object Tracking by Associating Every Detection Box 论文详细解读ByteTrackByteTrack算法简介ByteTrack算法流程ByteTrack算法描述一:对检测框进行分…

SOA架构的理解

1. SOA概述 SOA(Service-Oriented Architecture,面向服务的架构)是一种在计算机环境中设计、开发、部署和管理离散模型的方法。SOA不是一种新鲜事物,它是在企业内部IT系统重复构建以及效率低下的背景下提出的。在SOA模型中&#x…

Nexus 3 清理docker镜像

该文章提供了一种清理nexus3中存储的docker镜像的一种新思路 查看docker repo 比如你的docker repo名字叫做test-repo,然后在nexus3首页的seatch下面找到docker,点进去随便查看一个已经上传的镜像 记住上面的Name选项,之后要用到 设定清理…

centos7 oracle19c安装||新建用户|| ORA-01012: not logged on

总共分三步 1.下载安装包:里面有一份详细的安装教程 链接:https://pan.baidu.com/s/1Of2a72pNLZ-DDIWKrTQfLw?pwd8NAx 提取码:8NAx 2.安装后,执行初始化:时间较长 /etc/init.d/oracledb_ORCLCDB-19c configure 3.配置环境变量,不配置环境变量,sq…

【Linux快速入门】文件目录操作

文章目录概念1. Linux文件系统概述2. Linux文件目录结构3. Linux文件和目录操作3.1 文件操作3.1.1 创建文件3.1.2 复制文件3.1.3 移动文件3.1.4 删除文件3.1.5 查看文件3.1.6 输出指令3.1.7 >和>>指令3.2 目录操作3.2.1 创建目录3.2.2 复制目录3.2.3 移动目录3.2.4 删…

Lesson 8.3 ID3、C4.5 决策树的建模流程 Lesson 8.4 CART 回归树的建模流程与 sklearn 参数详解

文章目录一、ID3 决策树的基本建模流程二、C4.5 决策树的基本建模流程1. 信息值(information value)2. C4.5 的连续变量处理方法三、CART 回归树的基本建模流程1. 数据准备2. 生成备选规则3. 挑选规则4. 进行多轮迭代5. 回归树的预测过程四、CART 回归树…

关于推荐系统的详细介绍

简介推荐系统是一种信息过滤系统,能够自动预测用户对特定产品或服务的偏好,并向其提供个性化的推荐。它通常基于用户的历史行为、个人喜好、兴趣和偏好等,通过数据挖掘和机器学习算法,在大数据的支持下生成个性化的推荐内容&#…

智云通CRM:与权力者沟通的策略有哪些?

权力者通常具备两个特点:忙和目标导向 1.忙 权力者都很忙(不忙也会装出很忙的样子),时间精力有限,销售人员眼里的大项目在权力者看来很有可能只是他诸多工作中的一项。因此,即使有不满者的引荐,…

ChatGPT露馅了,它明明就是人

让人工智能理解句子成分和语义,这看起来是件不可能的事,看过流浪地球的都知道,那里面的人工智能哪怕发展到2057年,也听不懂比喻和反问。 那最近大火的chatGPT能不能听懂冷笑话呢?它不仅能写代码、论文,居然…