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)脚本创建执行与变量使用_哔哩哔哩_bilibilihttps://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. 主要特点:
-
命令自动化:Shell脚本可以将多个Shell命令组合成一个自动化脚本,避免手动输入命令。
-
文本文件:脚本本质上是一个文本文件,可以使用任何文本编辑器(如Vim、Nano、VS Code等)编辑。
-
解释执行:Shell脚本并不需要事先编译,它由Shell解释器直接执行,通常通过命令行终端运行。
-
系统管理与自动化:常用于自动化系统管理任务(如备份、文件处理、日志分析等)以及批处理操作。
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
命令解释
-
set
:该命令列出当前 shell 环境中所有的变量,包括环境变量和局部变量。输出的内容会非常多,包括变量名和它们的值。 -
|
(管道符):这个符号表示将set
命令的输出传递给下一个命令。在这里,它将set
输出的结果传递给grep
命令进行筛选。 -
grep name
:grep
是一个常用的文本搜索工具,它会在输入的内容中查找包含 "name" 的行,并输出匹配的结果。
就会输出我们刚才定义的name和其他包含name的变量
5.删除变量
在 Shell 中,unset
命令用于 删除变量 或 取消函数定义。当你使用 unset
删除一个变量时,这个变量将不再在当前 shell 会话中有效,无法再访问它。
unset name
其中 name
是你想要删除的变量的名称。
-
unset
删除的是当前 shell 环境中的 局部变量 或 环境变量,它不会影响系统或父进程中的其他变量。 -
一旦变量被
unset
删除,你将无法再访问它,直到它被重新定义。
结语
通过本篇文章的学习,我们对 Shell 脚本有了全面的了解,掌握了从基本概念到实际操作的各个方面。Shell 脚本不仅是一种强大的自动化工具,也是 Linux 和类 Unix 系统管理员日常工作中必不可少的一部分。它允许我们高效地管理系统、执行批量任务、自动化流程,甚至创建复杂的脚本应用。
在本文中,我们探讨了 Shell 脚本的定义与主要特点,学习了如何创建和执行脚本,以及常用命令如 chmod
、source
和 set
的使用。通过对变量的定义与引用、命令解释和变量管理的深入了解,我们为日后的脚本编写奠定了坚实的基础。