声明!
学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连接进入b站主页[B站泷羽sec](https://space.bilibili.com/350329294)
1. 引言
Shell脚本是自动化任务和系统管理中非常有用的工具。本文将介绍Shell脚本的基础知识,包括如何创建、执行脚本以及如何在脚本中使用变量。
2. 脚本文件的创建与执行
2.1 脚本文件的后缀和解释器选择
Shell脚本文件通常使用.sh
后缀,表示它是一个Shell脚本文件。脚本的解释器决定了脚本的执行环境,不同的解释器支持不同的功能。常见的三种解释器如下:
-
#!/bin/bash
- 使用场景:当脚本需要使用Bash特性,如数组、字符串处理等高级功能时使用。
- 适用:复杂脚本或需要跨平台支持(Linux/macOS)。
-
#!/bin/dash
- 使用场景:当脚本只依赖基本的POSIX功能,且对执行速度要求较高时使用。
- 适用:系统启动脚本或对性能要求高的环境。
-
#!/bin/sh
- 使用场景:需要确保脚本能够在任何符合POSIX标准的Shell中运行,避免依赖特定Shell时使用。
- 适用:简单脚本,要求高兼容性。
简而言之:
- 如果脚本依赖Bash特性,选择
#!/bin/bash
。 - 如果追求轻量和性能,选择
#!/bin/dash
。 - 如果需要最大兼容性,选择
#!/bin/sh
。
2.2 创建脚本文件
首先使用vim
或其他文本编辑器创建脚本文件:
vim 1.sh
然后在文件中编写脚本内容,例如:
echo "Hello, world!"
保存并退出编辑器:
- 在
vim
中输入:wq!
来保存并退出。
2.3 脚本执行方法
创建脚本文件后,需要赋予执行权限。默认情况下,脚本文件没有执行权限,需要使用以下命令赋予权限:
sudo chmod 777 1.sh
执行方法:
-
直接执行: 使用
./
命令执行脚本:./1.sh
-
通过指定解释器执行: 你也可以指定脚本解释器来执行脚本。例如:
sh 1.sh
dash
1.sh
bash 1.sh注意:如果脚本文件不在当前路径下,记得指定完整路径或先进入到脚本所在的目录。
-
使用
source
命令执行:source
命令会在当前Shell环境中执行脚本,执行时脚本中的命令不会启动新的子Shell:source 1.sh
使用
source
执行脚本时,如果脚本包含像ls
这样的命令,你会发现文件的颜色标注与在命令行直接执行时有所不同,下面是每个文件对应的颜色的表格:
3. Shell脚本中的变量
3.1 变量的声明与定义
在Shell脚本中,变量的定义不需要声明类型。可以直接使用等号赋值
name="momota"
注意:变量赋值时,不要在等号两边加空格,否则会导致错误。
3.2 变量输出
可以使用echo
命令来输出变量的值,也可以定义和输出一起:
echo $name # 输出 "momota"
age=27;echo $age # 输出 "27"
输出时,变量值会被替换到$
符号的位置。
复杂的输出
你可以将多个变量和文字结合输出:
echo My name is $name and my age is $age years old
也可以使用引号来处理字符串:
-
双引号(
"
)和单引号('
)都会将变量名当作普通字符串,不会解析变量。echo "My name is $name and my age is $age years old."
如果需要避免变量之间的空格,使用双引号或花括号:
echo My name is $name and my age is ${age}years old
echo my name is $name and my age is "$age"years old
3.3 查看和删除变量
查看所有定义的变量:
set # 列出所有环境变量
如果你只想查看特定的变量,可以使用grep
命令过滤:
set | grep name # 查找所有含有name的变量
删除变量可以使用unset
命令:
unset name # 删除name变量
再次使用
set | grep name
查看,确认该变量已经被删除。