shell脚本_创建执行与变量的定义与使用

PS:前言本章节讲解使用的系统为linux2024.1,基于Debian的Linux发行版。

一、什么是shell脚本?

1. 定义:

2. 主要特点:

3. shell脚本的基本结构

4. Shebang

二、创建执行

1.脚本的创建

2. 脚本的执行

2.1.chmod

2.2. 使用脚本解释器直接运行脚本

2.3.source

3. 解释器

三、变量的定义与使用

1. 定义变量

2. 引用变量

3. set 命令查看变量

4. 通过grep来筛选内容

命令解释

5.删除变量

结语


学习视频泷羽sec:

shell脚本(1)脚本创建执行与变量使用_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1P6UKYDEAs?spm_id_from=333.788.videopod.sections&vd_source=0e1eb78c133fc5f90cf3666ebd4c1a64


一、什么是shell脚本?

Shell脚本是一个由一系列Shell命令、控制结构和逻辑语句组成的脚本文件,用于在类Unix操作系统中自动化执行一系列任务。它通过Shell(如Bash、Zsh、Sh等)解释执行,通常用于系统管理、文件操作、批处理任务以及自动化工作流等场景。

1. 定义:

Shell脚本是一个包含多个命令和程序逻辑的文本文件,通过Shell(命令行解释器)解释执行,旨在自动化或简化日常任务。

2. 主要特点:

  1. 命令自动化:Shell脚本可以将多个Shell命令组合成一个自动化脚本,避免手动输入命令。

  2. 文本文件:脚本本质上是一个文本文件,可以使用任何文本编辑器(如Vim、Nano、VS Code等)编辑。

  3. 解释执行:Shell脚本并不需要事先编译,它由Shell解释器直接执行,通常通过命令行终端运行。

  4. 系统管理与自动化:常用于自动化系统管理任务(如备份、文件处理、日志分析等)以及批处理操作。

3. shell脚本的基本结构

  • Shebang:指定解释器。

  • 注释:描述脚本功能或解释代码。

  • 命令:实现脚本功能的核心部分。

  • 变量:存储和操作数据。

  • 控制结构:如条件判断和循环,控制程序流。

  • 函数:组织代码,提升可复用性。

  • 输入输出:与用户交互并处理数据。

  • 退出状态:通过状态码反馈执行结果。

4. Shebang

Shebang是Shell脚本的第一行,用于指定脚本应由哪个解释器执行。在Linux和Unix系统中,Shebang通常以 #! 开头,后面跟着解释器的路径。

  • 示例:#!/bin/bash

    这行指示系统使用 /bin/bash 作为解释器来执行这个脚本。

  • 常见Shebang

    • #!/bin/bash:使用Bash解释器(最常见)

    • #!/bin/sh:使用系统默认Shell(通常是Bash或Dash)

    • #!/usr/bin/env python3:用于Python脚本,指定Python解释器。

接下来的这些章节会开始shell脚本的学习之旅


二、创建执行

1.脚本的创建

  • 可以用touch或者echo命令来创建sh文件

  • 可以使用任何文本编辑器(如 nano, vi, vim, gedit, emacs 等)来创建脚本文件。

2. 脚本的执行

在默认情况下我们创建的脚本是没有权限被执行的。如果不明白看往期章节关于文件的权限部分Linux基础-常用操作命令详讲

这里有两种方案

2.1.chmod

Shell脚本文件本身需要具有“可执行”权限。使用 chmod 命令,你可以赋予脚本文件适当的权限,使得它能够被系统执行。

  • chmod +x script.sh

    • +x 表示给文件添加“执行”权限。

    • script.sh 是你的Shell脚本文件名。

2.2. 使用脚本解释器直接运行脚本

如果你的脚本没有执行权限,但你知道它是有效的Shell脚本,你可以直接通过指定解释器,通过它们可以运行脚本内容,无论脚本本身是否有执行权限。

  • /bin/bash script.sh # 使用 Bash 解释器执行脚本

  • /bin/sh script.sh # 使用默认的 Bourne shell 执行脚本

  • /bin/dash script.sh # 使用 Dash shell 执行脚本

这三种其实不管用哪种脚本解释器最后调用的还是dash。

2.3.source

  • source 命令会读取并执行一个文件中的内容,所有在该脚本中定义的变量、函数、或者更改的环境设置都会保留在当前 shell 中。

  • source 可以用来重新加载配置文件,或在当前 shell 中运行脚本,保持环境的连续性。

  • 它和sh的区别是存在颜色加深,会显示如原本命令的目录颜色、文件颜色。

  • source script.sh

3. 解释器

在Linux和类Unix系统中,解释器(Interpreter)是一个将脚本文件(例如Shell脚本)中的代码逐行翻译并执行的程序。 /bin/bash/bin/sh/bin/dash 都是不同的Shell解释器。

解释器的作用是将脚本中的命令逐行解析并执行,因此即使脚本文件本身没有执行权限,只要你指定了合适的解释器,它就能执行。

  • 解释器:负责逐行解析并执行脚本文件中的命令。常见的解释器有 /bin/bash/bin/sh/bin/dash

  • 直接执行脚本:通过指定解释器(即使文件没有执行权限),你可以运行脚本。系统会通过该解释器来执行脚本内容。

  • /bin/sh/bin/dash/bin/sh 是一个符号链接,可能指向 Dash 或其他Shell,这决定了脚本的执行环境。


三、变量的定义与使用

在 Shell 脚本中,变量的定义与使用非常简单,但需要注意 Shell 的语法规则。以下是 Shell 脚本中变量定义和使用的基本知识:

1. 定义变量

Shell 中定义变量时,变量名和等号之间不能有空格。例如:

variable_name=value

注意:

  • 变量名只能由字母、数字和下划线组成,且不能以数字开头。

  • 变量定义时不需要使用 = 以外的符号。

2. 引用变量

在使用变量时,需要通过 $ 符号来引用它的值。例如:

echo $name
echo $age

如果需要在变量引用中包含更多文本或者字符,可以使用花括号 {} 来确保正确的解析。例如:

echo "My name is ${name} and I am ${age} years old."

ps:多变量必须由双引号包裹或不包裹,变量名字写在${}内,单引号就原模原样输出字符串不读取变量。

3. set 命令查看变量

在 Unix-like 系统(如 Linux 或 macOS)中,set 是一个 shell 内置命令,用于列出所有当前 shell 环境中的变量,包括环境变量和局部变量。

  • 列出所有变量: set 命令将显示当前 shell 环境中的所有变量,包括环境变量、局部变量和 shell 特殊变量。

  • 显示的变量包括:

    • 环境变量(通过 export 设置的变量)

    • 局部变量(没有使用 export 设置的变量)

    • shell 特殊变量(如 $?\$0 等)

如果你只输入 set 命令,它将列出当前 shell 环境中的所有变量:

set

输出会非常长,包含许多信息。例如,你可能会看到如下内容包含我们刚才创建的变量:

BASH=/bin/bash
BASH_VERSION='5.0.17(1)-release'
...
MY_VAR='Hello'

4. 通过grep来筛选内容

grep是一个常见的命令,用于查找和筛选包含特定字符串

set | grep name

命令解释

  1. set:该命令列出当前 shell 环境中所有的变量,包括环境变量和局部变量。输出的内容会非常多,包括变量名和它们的值。

  2. |(管道符):这个符号表示将 set 命令的输出传递给下一个命令。在这里,它将 set 输出的结果传递给 grep 命令进行筛选。

  3. grep namegrep 是一个常用的文本搜索工具,它会在输入的内容中查找包含 "name" 的行,并输出匹配的结果。

就会输出我们刚才定义的name和其他包含name的变量

5.删除变量

在 Shell 中,unset 命令用于 删除变量取消函数定义。当你使用 unset 删除一个变量时,这个变量将不再在当前 shell 会话中有效,无法再访问它。

unset name

其中 name 是你想要删除的变量的名称。

  • unset 删除的是当前 shell 环境中的 局部变量环境变量,它不会影响系统或父进程中的其他变量。

  • 一旦变量被 unset 删除,你将无法再访问它,直到它被重新定义。

结语

通过本篇文章的学习,我们对 Shell 脚本有了全面的了解,掌握了从基本概念到实际操作的各个方面。Shell 脚本不仅是一种强大的自动化工具,也是 Linux 和类 Unix 系统管理员日常工作中必不可少的一部分。它允许我们高效地管理系统、执行批量任务、自动化流程,甚至创建复杂的脚本应用。

在本文中,我们探讨了 Shell 脚本的定义与主要特点,学习了如何创建和执行脚本,以及常用命令如 chmodsourceset 的使用。通过对变量的定义与引用、命令解释和变量管理的深入了解,我们为日后的脚本编写奠定了坚实的基础。

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

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

相关文章

CSP/信奥赛C++语法基础刷题训练(11):洛谷P5743:猴子吃桃

CSP/信奥赛C语法基础刷题训练(11):洛谷P5743:猴子吃桃 题目描述 一只小猴买了若干个桃子。第一天他刚好吃了这些桃子的一半,又贪嘴多吃了一个;接下来的每一天它都会吃剩余的桃子的一半外加一个。第 n n n…

C++11(四)---可变参数模板

文章目录 可变参数模板 可变参数模板 参数包代表多个类型和参数 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包 // 声明一个参数包Args...args&#xff0c;这个参数包中可以包含0到任意个模板参数。 template <class ...Args> void ShowList(Args... arg…

【qt】控件1

1.控件使能&#xff08;enabled&#xff09; QPushbutton*stnew QPushbutton(this);//定义一个按钮 st->setEnabled(false);//按钮设置不能使用当设置该控件不能使用的话&#xff0c;对应控件的子控件也不能使用 通过isEnabled()函数可以查看对应控件状态 演示&#xff1…

昇思MindSpore第二课---Transformer

1. Transformer的概念 Transformer是一种基于注意力机制结构的神经网络&#xff0c;其主要的作用就是用于处理机器翻译、语言建模以及文本生成等自然语言的处理。 比如人类在做一篇阅读理解的时候&#xff0c;我们的注意力可能主要集中在我们所阅读的这一行内容。而机器也是如此…

【Go】-bufio库解读

目录 Reader和Writer接口 bufio.Reader/Writer 小结 其他函数-Peek、fill Reader小结 Writer Scanner结构体 缓冲区对于网络数据读写的重要性 Reader和Writer接口 在net/http包生成的Conn 接口的实例中有两个方法叫做Read和Write接口 type Conn interface {Read(b []b…

mac 0S中虚拟机分辨率高怎么办

在VMware Fusion安装的Windows虚拟机有时候会遇到下图的问题&#xff0c;分辨率很高、桌面和任务栏的图标都很小&#xff0c;没办法正常使用。 解决方法&#xff1a; 点击工具栏中的扳手图标&#xff0c;打开设置。 打开系统设置中的“显示器”。 取消勾选“使用Retina全分辨率…

找不到d3dx9_43.dll怎么解决,d3dx9_43.dll缺失的七种解决方法

​在计算机游戏领域&#xff0c;遇到“找不到d3dx9_43.dll”错误信息是一个相当普遍的现象。这一问题不仅影响玩家的游戏体验&#xff0c;还可能导致游戏无法启动或运行不稳定。本文旨在深入解析这一问题的原因&#xff0c;并提供有效的解决方法&#xff0c;帮助广大游戏玩家轻…

论文《基于现实迷宫地形的电脑鼠设计》深度分析(四)——现实迷宫算法

论文概述 《基于现实迷宫地形的电脑鼠设计 》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实…

ARM(安谋) China处理器

0 Preface/Foreword 0.1 参考博客 Cortex-M23/M33与STAR-MC1星辰处理器 ARM China&#xff0c;2018年4月established&#xff0c;独立运行。 1 处理器类型 1.1 周易AIPU 1.2 STAR-MC1&#xff08;星辰处理器&#xff09; STAT-MC1&#xff0c;主要为满足AIOT应用性能、功…

Iview DatePicker 仅允许选择当前月份及以后的月份

iview DatePicker之前月份禁用且下月可用 html代码 <DatePicker type"month" :options"options4" :value"dialogForm.estimatedStartTimeWithCreate" on-change"monthTime($event, loadDateStart)" placeholder"请选择时间&q…

Redis 内存管理

参考&#xff1a;面试官&#xff1a;为什么 Redis 不立刻删除已经过期的数据&#xff1f; 目录 1.Redis 给缓存数据设置过期时间有什么用&#xff1f; 2.Redis 是如何判断数据是否过期的呢&#xff1f; 3.Redis 过期 key 删除策略了解么&#xff1f; 4.大量 key 集中过期怎…

【IC每日一题:SVA简介】

IC每日一题&#xff1a;SVA简介 1 断言概念1.1 断言优势&#xff1b;1.2 断言类型1.2.1 立即断言1.2.2 并行断言1.2.3 并发断言Demo 2 SVA语法2.1 蕴含操作符&#xff1a;|-> 和 ->2.1.1 蕴含操作符 |>2.1.2 蕴含操作符|-> 2.2 延时操作符2.2.1 ##n 操作符 2.3 重复…

深度学习之One Stage目标检测算法2

我们将对单次目标检测器&#xff08;包括SSD系列和YOLO系列等算法&#xff09;进行综述。我们将分析FPN以理解多尺度特征图如何提高准确率&#xff0c;特别是小目标的检测&#xff0c;其在单次检测器中的检测效果通常很差。然后我们将分析Focal loss和RetinaNet&#xff0c;看看…

【MySQL】优化方向+表连接

目录 数据库表连接 表的关系与外键 数据库设计 规范化 反规范化 事务一致性 表优化 索引优化 表结构优化 查询优化 数据库表连接 表的关系与外键 表之间的关系 常见表关系总结 一对一关系&#xff1a;每一条记录在表A中对应表B的唯一一条记录&#xff0c;反之也是&a…

SHELL笔记(概念+变量)

shell 概念 Shell 是一个命令行解释器&#xff0c;它充当用户与操作系统内核之间的桥梁。用户在 Shell 环境下输入各种命令&#xff0c;Shell 负责接收并分析这些命令&#xff0c;然后将其转换为内核能够理解和执行的系统调用。通过这种方式&#xff0c;用户可以便捷地操作计算…

统信UOS开发环境支持Golang

UOS为Golang开发者提供了各种编辑器和工具链的支持,助力开发者实现高质量应用的开发。 文章目录 一、环境部署Golang开发环境安装二、代码示例Golang开发案例三、常见问题1. 包导入错误2. 系统资源限制一、环境部署 Golang开发环境安装 golang开发环境安装步骤如下: 1)安装…

web前端开发--盒子属性

1、设置背景图像固定 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>设置背景图像固定</title><style type"text/css">/*p{background-attachment: scroll;/*fixed固定*//*随元素滚动还是固定*/}&…

Python数据分析NumPy和pandas(三十五、时间序列数据基础)

时间序列数据是许多不同领域的结构化数据的重要形式&#xff0c;例如金融、经济、生态学、神经科学和物理学。在许多时间点重复记录的任何内容都会形成一个时间序列。许多时间序列是固定频率的&#xff0c;也就是说&#xff0c;数据点根据某些规则定期出现&#xff0c;例如每 1…

前端开发之打印功的使用和实例(vue-print-nb)

通过插件来进行实现 前言效果图1、安装插件vue2vue32、 引入Vue项目2、 使用2.1、在项目中创建按钮并且使用v-print绑定绑定打印事件2.2、编写要打印的内容,给内容附加唯一的id2.3、绑定的时间的方法和参数3、整体代码(此代码是通过vue3来进行实现的但是逻辑都是一样的)前言…

使用Web Animations API实现复杂的网页动画效果

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂的网页动画效果 使用Web Animations API实现复杂…