声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
shell脚本1,创建、执行、变量使用
1,创建一个脚本 1.sh vim 1.sh
Linux中三种常见的Shell解释器
1. Sh (Bourne Shell)
简介
- Sh,即Bourne Shell,最早由Stephen Bourne在20世纪70年代为UNIX系统开发。
- 它是许多其他Shell的基础,包括Bash。
特点
- 基础性:作为最早的Shell之一,它的语法和功能相对简单,但非常高效。
- 兼容性:几乎所有UNIX和Linux系统都包含Sh,且许多系统脚本都是用Sh编写的。
- 编程能力:在脚本编程方面表现优秀,但在用户交互方面相对较弱。
使用场景
- 适用于编写系统启动和关闭脚本。
- 用于编写需要在多种UNIX系统上运行的脚本,因为Sh几乎在所有UNIX系统上都可用。
2. Bash (Bourne Again Shell)
简介
- Bash是Bourne Shell的扩展,旨在提供更多的功能和更好的用户体验。
- 它是大多数Linux发行版的默认Shell。
特点
- 功能强大:提供命令补全、命令编辑和命令历史表等功能。
- 扩展性:包含了许多C Shell和Korn Shell中的优点,有灵活和强大的编程接口。
- 用户友好:具有友好的用户界面,适合新手和专家用户。
使用场景
- 适用于日常的命令行操作和脚本编写。
- 适合需要复杂命令和脚本处理的场景。
3. Dash (Debian Almquist Shell)
简介
- Dash是Bash的一个轻量级替代品,最初从NetBSD的ash发展而来。
- 它被设计为尽可能小和高效,同时保持POSIX标准的兼容性。
特点
- 小巧高效:比Bash小得多,适合资源受限的环境。
- POSIX兼容:严格遵循POSIX标准,确保脚本的可移植性。
- 安全性:由于代码简洁,漏洞较少,相对更安全。
使用场景
- 适用于嵌入式系统和其他资源受限的环境。
- 用于编写需要高效执行的脚本。
Shell名称 | 简介 | 特点 | 使用场景 |
Sh | 最早的Shell之一 | 基础性、兼容性、编程能力强 | 系统脚本、多种UNIX系统 |
Bash | Bourne Shell的扩展 | 功能强大、扩展性好、用户友好 | 日常操作、复杂命令处理 |
Dash | Bash的轻量级替代品 | 小巧高效、POSIX兼容、安全性高 | 嵌入式系统、资源受限环境 |
可以发现这三种解释器最后调用的都是dash解释器
三种方法执行创建的脚本
1,执行第一步创建的1.sh脚本
注意权限的赋予。可以看看一个新创建sh脚本的初始权限
拥有者只有可读可写的权限,没有执行权限。
chmod +x new.sh默认给拥有者/拥有组/其他人都赋予了执行权限
2,直接新建一个sh文件默认是没有执行权限的,但是使用编辑器命令sh 2.sh/bash 2.sh/dash 2.sh就可以不需要给执行权限直接执行
脚本执行器能够直接执行没有执行权限的shell脚本,这通常是由于以下原因:
- 解释器的权限:在Linux系统中,解释器(如Bash、Sh等)本身具有执行权限。当使用解释器直接执行脚本时,例如通过bash script.sh 或sh script.sh ,解释器会读取脚本内容并逐行执行。这种方式并不依赖于脚本本身的执行权限,而是依赖于解释器的权限。
- 脚本的可读性:即使脚本没有执行权限,只要它具有读权限,解释器就能够读取脚本内容并执行。这是因为解释器只需要能够读取脚本内容,而不需要脚本本身具有执行权限。
- 特殊情况:在某些特殊情况下,例如使用source命令或.命令来执行脚本,脚本的执行并不依赖于脚本的执行权限。这种方式通常用于在当前Shell环境中执行脚本内容。
3,source命令执行shell脚本
source命令是一个非常有用的工具,主要用于在当前Shell环境中读取并执行指定文件中的命令。这个命令通常用于加载配置文件或执行脚本内容,而不需要启动一个新的子Shell。
主要用途
source命令的主要用途包括:
- 加载配置文件:例如,加载.bashrc或.profile等配置文件,以便在当前Shell环境中应用配置。
- 执行脚本内容:可以直接执行脚本文件中的命令,而不需要赋予脚本执行权限。
使用方法
source命令的基本使用方法如下:
source filename
或者使用.命令:
. filename
这两种方式是等效的,都可以在当前Shell环境中读取并执行指定文件中的命令。
示例
以下是一些示例,展示了如何使用source命令:
- 加载.bashrc配置文件:
source ~/.bashrc - 执行脚本内容:
source script.sh
或者:
. script.sh
注意事项
- 权限要求:使用source命令时,只需要文件具有读权限即可,不需要文件具有执行权限。
- 环境变量:通过source命令加载的配置文件或执行的脚本内容,会影响到当前Shell环境中的变量。
shell编程变量
在 Shell 编程中,变量是用于存储数据值的名称。
定义变量时,变量名不加美元符号($,PHP语言中变量需要),如:
your_name="cyber secruity"
变量名的命名规则:
- 只包含字母、数字和下划线: 变量名可以包含字母(大小写敏感)、数字和下划线 _,不能包含其他特殊字符。
- 不能以数字开头: 变量名不能以数字开头,但可以包含数字。
- 避免使用 Shell 关键字: 不要使用Shell的关键字(例如 if、then、else、fi、for、while 等)作为变量名,以免引起混淆。
- 使用大写字母表示常量: 习惯上,常量的变量名通常使用大写字母,例如 PI=3.14。
- 避免使用特殊符号: 尽量避免在变量名中使用特殊符号,因为它们可能与 Shell 的语法产生冲突。
- 避免使用空格: 变量名中不应该包含空格,因为空格通常用于分隔命令和参数。
1,给变量赋值(无$符号)——打印输出变量(带$符号)
2,复杂的变量赋值打印输出
3,变量的改变,变量的赋值可以直接覆盖改变
4,变量的拼接
基本语法
在Shell中,变量拼接可以通过多种方式实现。以下是几种常见的方法:
1. 直接拼接
var1="Hello"
var2="World"
result="$var1 $var2"
echo $result
2. 使用双引号
var1="Hello"
var2="World"
result="$var1$var2"
echo $result
3. 使用单引号
var1="Hello"
var2="World"
result='$var1 $var2'
echo $result # 输出: $var1 $var2
4. 使用花括号
var1="Hello"
var2="World"
result="${var1} ${var2}"
echo $result # 输出: Hello World
注意事项
- 使用双引号时,Shell会自动解析变量,而使用单引号时,变量不会被解析。
- 使用花括号可以明确变量的边界,特别是在变量名后面紧跟其他字符时,避免歧义。
5,只读变量
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
运行脚本,结果如下: