Linux的shell脚本

Linux的shell脚本

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JH8I9sJH-1689083323474)(0fe5bb9701654bf4b6652fa6d8cf6557.gif)]

😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄

✨座右铭:宝剑锋从磨砺出,梅花香自苦寒来。

⛪️个人主页:点击进入博客主页

🚀欢迎大家浏览博主的文章!在阅读过程中,如果发现需要纠正的地方,请不吝指出,愿能与诸君共同进步!

文章目录

  • 🍭Linux的shell脚本
    • 🍭什么是shell脚本
    • 🍭shell脚本的基本结构
    • 🍭shell脚本的运行方式
    • 🍭shell脚本的调试方法
    • 🍭shell脚本的实例
      • 🍭实例一:打印Hello, World
      • 🍭实例二:计算两个数的和
      • 🍭实例三:判断一个数是否为偶数
      • 🍭实例四:输出1到10的自然数
      • 🍭实例五:统计一个文件中的单词个数
    • 🍭shell脚本的注意事项


😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!😄

✨座右铭:宝剑锋从磨砺出,梅花香自苦寒来。

⛪️个人主页:点击进入博客主页

🚀欢迎大家浏览博主的文章!在阅读过程中,如果发现需要纠正的地方,请不吝指出,愿能与诸君共同进步!

文章目录

  • 🍭Linux的shell脚本
    • 🍭什么是shell脚本
    • 🍭shell脚本的基本结构
    • 🍭shell脚本的运行方式
    • 🍭shell脚本的调试方法
    • 🍭shell脚本的实例
      • 🍭实例一:打印Hello, World
      • 🍭实例二:计算两个数的和
      • 🍭实例三:判断一个数是否为偶数
      • 🍭实例四:输出1到10的自然数
      • 🍭实例五:统计一个文件中的单词个数
    • 🍭shell脚本的注意事项


在这里插入图片描述

🍭Linux的shell脚本

Shell脚本是一种在Linux系统中编写的脚本语言,用于执行一系列的命令和程序。它具有简单、灵活和高效的特点,并广泛应用于自动化任务、系统管理和软件开发等方面。
在这里插入图片描述

Shell脚本的基本结构包括脚本头、注释、变量、命令、控制结构和函数。脚本头指定了脚本的解释器,注释用于说明脚本的功能和逻辑,变量用于存储数据,命令用于执行操作,控制结构用于控制程序流程,函数用于封装可重用的代码块。Shell脚本可以通过两种方式运行:作为可执行程序或作为解释器参数。作为可执行程序时,需要先给脚本文件添加执行权限,然后可以直接运行该文件。作为解释器参数时,需要在命令行中使用shell解释器来执行脚本文件。调试Shell脚本有多种方法:使用echo命令可以打印出变量的值以及程序执行的状态信息,使用set命令可以开启或关闭调试模式并输出执行过程中的详细信息,使用trap命令可以捕获和处理脚本中发生的信号。为了更好地理解Shell脚本的概念和用法,提供了几个实例:打印Hello, World;计算两个数的和;判断一个数是否为偶数;输出1到10的自然数和;统计一个文件中的单词个数。在编写和运行Shell脚本时需要注意一些事项:指定正确的解释器,以确保脚本能够正确执行;不要在变量赋值时加空格,以避免产生错误;在使用字符串时加双引号,以防止特殊字符被解释;使用方括号来进行条件判断;使用分号来分隔多条命令等。

🍭什么是shell脚本

shell脚本是一种用于在Unix/Linux系统中执行一系列命令的程序。它可以让你自动化一些常见的任务,比如文件操作,程序执行,文本处理等等。shell脚本通常以.sh为扩展名,需要有可执行权限才能运行。

shell脚本的优点有:

  • 简单易学,不需要编译,只需要一个文本编辑器就可以编写。
  • 跨平台,可以在不同的Unix/Linux系统中运行,只要有相应的shell解释器。
  • 灵活强大,可以调用系统的各种命令和工具,甚至可以嵌入其他编程语言。

shell脚本的缺点有:

  • 效率较低,每次运行都需要解释和执行,不能像编译型语言那样直接运行二进制代码。
  • 错误处理较弱,没有像其他编程语言那样完善的异常处理机制。
  • 可移植性较差,不同的shell解释器可能有不同的语法和功能,导致同一个脚本在不同的环境中运行结果不一致。

🍭shell脚本的基本结构

一个典型的shell脚本包含以下几个部分:

  • 脚本头:指定脚本使用哪种shell解释器来执行。通常以#!开头,后面跟上解释器的路径。比如:#!/bin/bash表示使用bash来执行该脚本。
  • 注释:用于说明脚本的作者、版权、目的等信息。通常以#开头,后面跟上注释内容。比如:# Author: Bing # Script for learning shell scripting
  • 变量:用于存储和传递数据。变量名由字母、数字和下划线组成,不能以数字开头。变量赋值时不需要加 符号,但是变量引用时需要加 符号,但是变量引用时需要加 符号,但是变量引用时需要加符号。比如:name=“Bing” echo $name
  • 命令:用于执行系统或自定义的操作。命令可以是内置的或外部的。内置命令是由shell解释器提供的,比如echo, read, cd等。外部命令是由系统或用户安装的程序提供的,比如ls, cp, grep等。命令可以带有参数和选项来控制其行为。比如:ls -l /home
  • 控制结构:用于实现逻辑判断和循环控制。常见的控制结构有if, case, for, while, until等。控制结构通常需要使用特殊符号来标记开始和结束,比如then, fi, do, done等。比如:if [ $name = “Bing” ]; then echo “Hello, Bing” fi
  • 函数:用于封装一些可重用的代码块。函数定义时使用function关键字或者直接使用函数名,并用花括号包围函数体。函数调用时直接使用函数名,并可以传递参数给函数。函数可以返回一个整数值给调用者,使用return关键字指定返回值。比如:function say_hello() { echo “Hello, $1” return 0 } say_hello “Bing”

🍭shell脚本的运行方式

shell脚本有两种运行方式:

  • 作为可执行程序。这种方式需要给脚本添加可执行权限,并在脚本头指定解释器。然后可以直接在命令行中输入脚本的路径来运行,或者在脚本所在目录下输入./脚本名来运行。比如:chmod +x hello.sh ./hello.sh
  • 作为解释器参数。这种方式不需要给脚本添加可执行权限,也不需要在脚本头指定解释器。只需要在命令行中输入解释器的路径,后面跟上脚本的路径来运行。比如:/bin/bash hello.sh

🍭shell脚本的调试方法

shell脚本编写过程中,可能会出现一些错误或者不符合预期的结果。为了找出问题的原因和位置,我们需要对脚本进行调试。调试shell脚本有以下几种方法:

  • 使用echo命令。echo命令可以用来输出变量的值或者一些提示信息,让我们知道脚本的执行流程和状态。我们可以在脚本中的关键位置添加echo命令,观察输出结果,判断是否正确。比如:echo “The name is $name”
  • 使用set命令。set命令可以用来设置或取消一些shell选项,其中有两个选项对于调试很有用:-x和-v。-x选项可以让shell在执行每条命令之前,先输出该命令;-v选项可以让shell在读取每条命令之前,先输出该命令。这样,我们可以看到脚本中的每条命令是如何被解释和执行的。我们可以在脚本中添加set -x或者set -v来开启这两个选项,也可以在运行脚本时加上这两个选项来开启。比如:set -x ./hello.sh 或者 ./hello.sh -x
  • 使用trap命令。trap命令可以用来捕捉一些信号或者退出状态,并执行一些操作。我们可以利用trap命令来捕捉错误信号或者非零退出状态,并输出一些错误信息或者调用函数来处理错误。比如:trap “echo ‘Error occurred’” ERR

🍭shell脚本的实例

为了让你更好地理解和掌握shell脚本的编写和运行,我给你准备了一些实例,你可以参考或者尝试运行它们。

🍭实例一:打印Hello, World

这是一个最简单的shell脚本,只有一条命令,就是用echo命令输出Hello, World这句话。你可以把以下内容保存为hello.sh,并给它添加可执行权限,然后运行它。

#!/bin/bash
echo "Hello, World"

运行结果:

Hello, World

🍭实例二:计算两个数的和

这是一个稍微复杂一点的shell脚本,它用read命令从用户输入读取两个数,并用let命令计算它们的和,然后用echo命令输出结果。你可以把以下内容保存为sum.sh,并给它添加可执行权限,然后运行它。

#!/bin/bash
echo "Enter two numbers:"
read a
read b
let c=a+b
echo "The sum is $c"

运行结果:

Enter two numbers:
3
5
The sum is 8

🍭实例三:判断一个数是否为偶数

这是一个涉及到逻辑判断的shell脚本,它用read命令从用户输入读取一个数,并用if语句和取余运算符(%)判断它是否为偶数,然后用echo命令输出结果。你可以把以下内容保存为even.sh,并给它添加可执行权限,然后运行它。

#!/bin/bash
echo "Enter a number:"
read n
if [ $((n%2)) -eq 0 ]; then
  echo "$n is even"
else
  echo "$n is odd"
fi

运行结果:

Enter a number:
7
7 is odd

🍭实例四:输出1到10的自然数

这是一个涉及到循环控制的shell脚本,它用for语句和seq命令生成1到10的自然数序列,并用echo命令输出每个数。你可以把以下内容保存为seq.sh,并给它添加可执行权限,然后运行它。

#!/bin/bash
for i in $(seq 1 10); do
  echo $i
done

运行结果:

1
2
3
4
5
6
7
8
9
10

🍭实例五:统计一个文件中的单词个数

这是一个涉及到文件操作和文本处理的shell脚本,它用cat命令读取一个文件的内容,并用wc命令统计其中的单词个数,然后用echo命令输出结果。你可以把以下内容保存为wordcount.sh,并给它添加可执行权限,然后运行它。假设要统计的文件名为text.txt。

#!/bin/bash
echo "The number of words in text.txt is:"
cat text.txt | wc -w 

运行结果:

The number of words in text.txt is:
12 

🍭shell脚本的注意事项

在编写和运行shell脚本时,还有一些注意事项,我们需要了解和遵守,以避免一些常见的错误和问题。以下是一些常见的注意事项:

- 在脚本头指定正确的解释器。不同的shell解释器可能有不同的语法和功能,如果指定错误的解释器,可能会导致脚本无法运行或者运行结果不正确。比如,如果你的脚本是用bash编写的,那么你应该在脚本头指定#!/bin/bash,而不是#!/bin/sh或者其他的解释器。
- 在变量赋值时不要加空格。在shell脚本中,变量赋值时等号两边不能有空格,否则会被认为是命令和参数。比如,name = "Bing"是错误的,应该写成name="Bing"。
- 在变量引用时加双引号。在shell脚本中,变量引用时最好加上双引号,以防止变量值中包含空格或者特殊字符而导致错误。比如,echo $name可能会出错,应该写成echo "$name"。
- 在条件判断时使用方括号。在shell脚本中,条件判断时需要使用方括号来包围条件表达式,并且方括号两边要有空格。比如,if [ $name = "Bing" ]是正确的,而if [$name = "Bing"]或者if [ $name="Bing" ]都是错误的。
- 在循环控制时使用分号。在shell脚本中,循环控制时需要使用分号来分隔循环条件和循环体,并且循环体要用do和done来标记开始和结束。比如,for i in $(seq 1 10); do echo $i; done是正确的,而for i in $(seq 1 10) do echo $i done是错误的。

这篇文章的目的是让你通过这个教程学习和掌握shell脚本的基本知识和技能,并在实践中运用它们来完成一些有用的任务。希望你能够从中受益。😊
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

查看docker运行状态,与查看防火墙运行状态

安装docker这里不细述了,可以通过 docker -version 查看安装的版本,出现成功就表示安装是ok的 查看docker状态是否启动状态,出现running就表示成功 systemctl status docker 如果没有则需要输入启动命令来启动 systemctl start docker 没报错…

对于没有任何基础的初学者,云计算该怎样学习?

想学习任何一门专业技能,可以按下面这一套逻辑梳理! 1)了解基本内容 云计算这个技术是做什么的?适用哪些场景?有什么优点和缺点? 同时建议先找技术大纲,至少要学哪些技能点,可以网…

6. Springboot快速回顾(集成Dubbo)

Dubbo是实现远程调用的一个框架,阿里巴巴开源的。远程调用就是B服务器可以调用A服务器的方法。大型项目会被拆分成多个模块,部署在不同的服务器上。若将公共模块集中部署在一台服务器上,可以方便其他服务器调用。因此,需要Dubbo。…

ArcGIS栅格影像数据处理

ArcGIS栅格影像数据处理 文章目录 ArcGIS栅格影像数据处理1. 栅格影像数据坐标系转换2. 栅格数据16bit转8bit3. 栅格数据波段变换参考链接 1. 栅格影像数据坐标系转换 点击【ArcToolbox】>【数据管理工具】>【投影和变换】>【栅格】>【投影栅格】。 2. 栅格数据16…

驱动 day8 作业

1.在内核模块中启用定时器&#xff0c;定时1s,让led1 一秒亮、一秒灭 2.基于gpio子系统完成LED灯驱动的注册&#xff0c;应用程序测试 1.mychrdev_timer.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/io…

electron-vue 台称串口对接 SerialPort

大致流程 1.首先找一个串口工具&#xff08;sscom5.12.1&#xff09;试试读取串口是否成功连上&#xff1b; 2.创建electron-vue的项目&#xff1b; 3.安装依赖&#xff0c;调整版本&#xff0c;启动项目&#xff1b;&#xff08;在electron中使用串口_electron 串口_Jack_K…

macOS Sonoma 14beta 3(23A5286g)发布(附黑/白苹果镜像地址)

系统镜像下载&#xff1a;百度&#xff1a;黑果魏叔 系统介绍 黑果魏叔 7 月 6 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;23A5286g&#xff09;&#xff0c;本次更新距离上次发布隔了 14 天。 小…

ELK日志记录——Kibana组件——grok 正则捕获插件

grok 正则捕获插件 grok 使用文本片段切分的方式来切分日志事件 内置正则表达式调用 %{SYNTAX:SEMANTIC} ●SYNTAX代表匹配值的类型&#xff0c;例如&#xff0c;0.11可以NUMBER类型所匹配&#xff0c;10.222.22.25可以使用IP匹配。 ●SEMANTIC表示存储该值的一个变量声明&…

springboot 日志配置(logback)

概述 Java 中的日志框架主要分为两大类&#xff1a;日志门面和日志实现。 Java 中的日志体系&#xff1a; 日志门面 日志门面定义了一组日志的接口规范&#xff0c;它并不提供底层具体的实现逻辑。Apache Commons Logging 和 Slf4j&#xff08;Simple Logging Facade for Jav…

五、卷积神经网络

文章目录 前言一、图像卷积1.1 不变性1.2 互相关运算1.3 卷积层1.4 互相关和卷积1.5 特征映射和感受野 二、填充和步幅2.1 填充2.2 步幅 三、多输入多输出通道3.1 多输入通道3.2 多输出通道3.3 11卷积层 四、汇聚层/池化层4.1 最大汇聚层与平均汇聚层4.2 填充和步幅4.3 多个通道…

2023-7-11-第十六式职责链模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

使用大型语言模(LLM)构建系统(七):评估1

今天我学习了DeepLearning.AI的 Building Systems with LLM 的在线课程&#xff0c;我想和大家一起分享一下该门课程的一些主要内容。之前我们已经学习了下面这些知识&#xff1a; 使用大型语言模(LLM)构建系统(一)&#xff1a;分类使用大型语言模(LLM)构建系统(二):内容审核、…

CE-Net

一、贡献 (1)提出DAC模块和RMP模块&#xff0c;以捕获更多高级特征并保留更多空间信息 (2)将所提出的DAC模块和RMP模块与编码器-解码器结构集成在一起&#xff0c;用于医学图像分割 二、方法 (b)部分是shortcut mechanism 空洞卷积 公式化为&#xff1a; 空洞率r对应于对输…

Django_测试模块(六)

目录 开始写我们的第一个测试 首先得有个 Bug 创建一个测试来暴露这个 bug 运行测试 修复这个 bug 更全面的测试 测试视图 针对视图的测试 Django 测试工具之 Client 改善视图代码 测试新视图 测试 DetailView 集中管理用例文件 使用Django测试运行器 源码等资料…

【IDEA】IDEA 版 Postman 新版发布,功能强大!

介绍 Restful Fast Request 是 IDEA 版 Postman&#xff0c;它是一个强大的 restful api 工具包插件&#xff0c;可以根据已有的方法帮助您快速生成 url 和 params。Restful Fast Request API 调试工具 API 管理工具 API 搜索工具。它有一个漂亮的界面来完成请求、检查服务…

力扣竞赛勋章 | 排名分数计算脚本

文章目录 力扣竞赛勋章介绍竞赛评分算法脚本&#xff08;本文的重点内容&#xff09;运行结果 代码修改自&#xff1a;https://leetcode.cn/circle/discuss/6gnvEj/ 原帖子的代码无法正常运行。 力扣竞赛勋章介绍 https://leetcode.cn/circle/discuss/0fKGDu/ 如果你想知道自…

宝塔 安装/使用/备份数据 Jenkins-图文小白教程

一、Jenkins包下载 大家可以从Jenkins官网&#xff08;https://www.jenkins.io/&#xff09;根据自己的需要下载最新的版本。 但Jenkins官网下载较慢&#xff0c;容易造成下载失败。可以去国内的开源镜像网站下载Jenkins最新版本。目前博主使用的是清华大学的开源镜像网站&…

【youcans动手学模型】SENet 模型及 PyTorch 实现

欢迎关注『youcans动手学模型』系列 本专栏内容和资源同步到 GitHub/youcans 【youcans动手学模型】SENet 模型 【经典模型】SENet 模型-Cifar10图像分类1. SENet 卷积神经网络模型1.1 模型简介1.2 论文介绍1.3 分析与讨论 2. 在 PyTorch 中定义 SENet 模型类2.1 定义 SE Block…

【ElasticSearch】JavaRestClient实现索引库和文档的增删改查

文章目录 一、RestClient1、什么是RestClient2、导入demo工程3、数据结构分析与索引库创建4、初始化JavaRestClient 二、RestClient操作索引库1、创建索引库2、删除索引库3、判断索引库是否存在 三、RestClient操作文档1、新增文档2、查询文档3、修改文档4、删除文档5、批量导入…

Linux之CentOS_7.9卸载MySQL_5.7全过程实操手册

前言&#xff1a;接以上&#xff0c;前面记录了Windows和Linux环境的MySQL部署&#xff0c;那我们既然都部署完成验证测试那就来个卸载记录吧&#xff0c;便于闭环收尾。 环境&#xff1a; 1、CentOS-7.9-x86_64-DVD-2009.iso 2、MySQL-5.7.42-linux-glibc2.12-x86_641、关闭…