Linux的shell脚本

news2024/11/26 14:58:13
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脚本的基本知识和技能,并在实践中运用它们来完成一些有用的任务。希望你能够从中受益。😊
在这里插入图片描述

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

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

相关文章

Ai数字人浪潮来袭,超写实数字人系统出世,为企业打造定制化服务

数字人概念首次出现在80年代,最初在音乐领域应用,使用手绘技术进行生成。随着时间的推移,传统手绘被CG和动作捕捉等技术取代,从而使虚拟数字人的制作变得更加简化并降低成本。因此,虚拟数字人产业进入产业化探索阶段。…

SpringBoot快速实践 --Ⅰ

文章目录 启动一个SpringBoot项目如何替换内嵌容器玩转SpringBoot配置全局异常处理过滤器拦截器使用Lombok简洁代码使用IDEA HTTP Client进行接口调试 启动一个SpringBoot项目 如果你觉得使用官网来创建太慢了,那你直接把以前项目的依赖粘过来就行了: …

pytorch LBFGS

LBFGS pytorch的LBFGS也是一个优化器 但是与一般的优化器不同 平常我们的顺序是 losscriterion(predict, gt) optim.zero_grad() loss.backward() optim.step()而LBFGS是 def closure():optim.zero_grad()loss criterion(predict, gt)loss.backward()return lossoptim.step…

5.EFLK(ELK+filebeat)+filter过滤

文章目录 EFLK(ELKfilebeat)部署filebeat修改配置文件logstash配置 logstash的filter过滤grok(正则捕获插件)内置正则表达式调用自定义表达式 mutate(数据修改插件)重命名字段添加字段删除字段转换数据类型替换字段内容以"|"为分割符拆分数据成…

系统升级丨让VR全景制作简单再简单

最高端的VR全景 往往只需要最朴素的制作方式 酷雷曼3D VR数字化升级平台4.0版本 闪耀上线 全新的后台界面 丝滑的编辑工具 无需代码 不用建模 简单拖拉拽移 依然有手就行 轻松搭建VR元宇宙空间 1、界面升级,让VR创作更加可视 全新视觉设计 酷雷曼3D VR…

【必读】未来八大最具潜力行业!看懂就赚了

1 网络安全行业 现在保护“网络安全”已经成为世界各国的重要共识。有专家表示,未来网络安全行业有望超越金融、地产业成最赚钱行业。 2 动漫行业 我国的动漫产业才刚刚起步,现在全国各地如北京、上海、杭州、大连、深圳、广州等城市均建立起动漫产业…

2023年中总结:未到年末,立的Flag就已实现

前言 去年年末,搞了一篇年终总结,立了一个小小的Flag,2023年实现全网粉丝量突破1.5万,可以很负责任的告诉大家,截至到当前,不仅已经实现,而且超额完成,虽然这个量,很低&a…

【目标检测】基于yolov5的道路坑洼检测(附代码和数据集)

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就…

《TCP/IP网络编程》第3,4章学习记录

基础知识: struct sockaddr_in {sa_family_t sin_family; //地址族(Address Family)uint16_t sin_port; //16位TCP/UDP端口号struct in_addr sin_addr; //32位IP地址char sin_zero[8]; //不使用 }sa_family_t包括: (1)AF_INET,IPv4网络协议…

【Linux】分布式监控 Zabbix

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Zabbix 介绍zabbix 概述Zabbix 监控原理Zabbix 6.0 新特性Zabbix 6.0 功能组件 Zabbix 6.0 部署Zabbix 添加客户端主机Zabbix 自定义监控内容Zabbix 自动发现与自动…

2.1、修改Gitea上传附件大小限制

目录 1. 修改Gitea配置2. 重启服务3. 使用 之前在Gitea上传附件时,显示大小超过3MB,不能符合我的使用场景。记录一下修改这个限制的配置。 1. 修改Gitea配置 默认在安装路径的custom/conf/app.ini文件中: 添加参数 [repository.upload] ; 是…

linux下cuda的安装

linux下cuda的安装 安装cuda11.1和pytorch1.8安装显卡驱动第一个报错第二个报错第三个错误屏幕不显示问题解决方案 安装cuda11.1 安装cuda11.1和pytorch1.8 通过上表可以发现,如果要使用CUDA11.1,那么需要将显卡的驱动更新至455.23或以上(Lin…

SpringBoot2+Vue2实战(十六)vue集成视频播放组件

修改文件上传大小限制 servlet:multipart:max-file-size: 100MBmax-request-size: 100MB Video.vue <template><div style"padding: 10px"><el-card><div v-for"item in videos" :key"item.id"style"margin: 10px 0…

走进Linux世界【二、VM与Linux安装】

第二章 VM与Linux安装 1、安装VMware ​ 这里安装Vm主要是为了安装Linux系统&#xff0c;除了相对云服务器&#xff0c;比较大众化的操作&#xff0c;当然更多的是熟悉Linux操作 1、Windows安装 ​ (1) 下载链接&#xff0c;目前版本上下载VM15的版本即可https://www.vmwar…

JavaScript ES6实现继承

1 对象的方法补充 2 原型继承关系图 3 class方式定义类 4 extends实现继承 5 extends实现继承 6 多态概念的理 function 创建的名称如果开头是大写的&#xff0c;那这个创建的不是函数&#xff0c;是创建了类。 ES6-class类中的内容 <!DOCTYPE html> <html lang&…

ChatGPT助力校招----面试问题分享(十一)

1 ChatGPT每日一题&#xff1a;PCB布线&#xff0c;高速信号线走直角的后果 问题&#xff1a;PCB布线&#xff0c;高速信号线走直角的后果 ChatGPT&#xff1a;对于高速信号线来说&#xff0c;最好避免使用直角布线。直角布线会引入反射和信号损耗&#xff0c;从而导致信号完…

IP网络基础

文章目录 数据通信基础数据流方向&#xff08;工作模式&#xff09;网络和Internet简介网络&#xff1a;互联网&#xff1a;总结&#xff1a; 协议和标准标准化组织标准化组织——IETF标准的种类 IP网络基本架构 lP网络在现代社会中有着越来越重要的地位。本课程将介绍数据通信…

详解c++---c++11(上)

目录标题 {}初始化decltype和autonullptr范围forfinal什么是左值和右值左值引用和右值引用右值引用的意义右值引用的使用const右值引用万能引用默认移动构造和移动赋值 {}初始化 在c98中允许使用{}对数组或者结构体元素进行统一的列表初始值设定&#xff0c;比如说下面有个结构…

使用USB转TTL线连接树莓派4B

一般我们刷完树莓派系统后&#xff0c;都是通过连接鼠标键盘及显示器来进行操作&#xff0c;当我们开启SSH功能后我们才可以通过ssh客户端进行远程访问&#xff0c;那么是否有更方便的方式进行连接&#xff0c;并且不需连接外部设备进行操作呢&#xff1f; 串口通信 当然可以…

python3+requests+unittest实战系列【一】

1.环境准备 python3 pycharm编辑器 2.框架目录展示 &#xff08;该套代码只是简单入门&#xff0c;有兴趣的可以不断后期完善&#xff09; &#xff08;1&#xff09;run.py主运行文件&#xff0c;运行之后可以生成相应的测试报告&#xff0c;并以邮件形式发送&#xff1b;…