内容预览 ≧∀≦ゞ
- Shell 脚本基础(2):环境变量、位置变量与运算符
-
- 声明
- 环境变量
-
- 什么是环境变量?
- 如何配置环境变量PATH?
-
- 方法 1:将脚本移动到环境变量目录
- 方法 2:将自定义目录添加到环境变量
- 位置变量
-
- 什么是位置变量?
- 使用位置变量进行参数传递
- 运算符
-
- 算术运算符
- 逻辑运算符
- 字符串运算符
- 小结
Shell 脚本基础(2):环境变量、位置变量与运算符
声明
笔记内容参考了B站UP主 泷羽sec 的学习视频,如有侵权,将立即删除。
本笔记旨在促进网络安全学习,任何不当使用均与作者无关,请勿逾越法律红线,否则后果自负。
希望这些内容能对各位师傅有所帮助,欢迎您的点赞和评论!
环境变量
什么是环境变量?
在上一节中,我们讨论了 临时变量 的使用,它们仅在当前 Shell 会话中有效,关闭 Shell 后就会失效。那么,什么是 环境变量 呢?
环境变量 是操作系统中的全局变量,它们的作用范围不仅限于当前 Shell,还可以被该 Shell 启动的所有子进程继承。
相比临时变量,环境变量是 全局性、长期性 的,能有效地将配置信息传递给相关程序或脚本。
以下是一些常见的环境变量及其用途:
$PATH
:定义可执行文件的搜索路径。$HOME
:当前用户的主目录路径。$PWD
:当前工作目录路径。$SHELL
:当前使用的 Shell 程序路径。$USER
:当前登录用户的用户名。$LANG
:系统语言和字符编码设置。
如何配置环境变量PATH?
在 Windows 系统中,命令提示符可以直接运行 ping
或 notepad
等命令,是因为 $PATH
环境变量中包含了这些命令所在的目录。Linux 系统也采用类似机制,执行ls
等命令时,等同于输入/usr/bin/ls
。如果希望自定义脚本可以像系统命令一样直接运行,可以通过以下两种方法实现。
方法 1:将脚本移动到环境变量目录
-
查看环境变量目录
$PATH
中定义的目录是系统搜索可执行程序的路径集合,可通过以下命令查看:bashecho $PATH
结果显示多个路径,使用冒号分隔,例如:
plaintext/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/home/user/bin
-
验证命令路径
使用
which
命令查看命令的路径:bashwhich ls
输出
/usr/bin/ls
,说明ls
命令在/usr/bin
目录下。 -
移动脚本到环境变量目录
将自定义脚本移动到
$PATH
中的目录(如/usr/local/bin
):bashchmod +x your_script.sh mv your_script.sh /usr/local/bin/
这样,脚本就可以直接通过文件名运行。
方法 2:将自定义目录添加到环境变量
如果希望脚本保留在自定义目录中,可以将该目录加入 $PATH
。
-
临时添加路径
使用
export
命令:bashexport PATH=/your/script/directory:$PATH
这行命令将
/your/script/directory
添加到现有的$PATH
变量前端。通过$PATH
的值扩展,系统在搜索命令时会优先检查新添加的目录。
注意:此设置仅在当前会话中有效。 -
永久添加路径
编辑 Shell 的配置文件(如
.bashrc
):bashecho 'export PATH=/your/script/directory:$PATH' >> ~/.bashrc source ~/.bashrc
-
示例:运行脚本
bashecho "echo Hello World" > hello.sh chmod +x hello.sh export PATH=$(pwd):$PATH hello.sh
位置变量
什么是位置变量?
Shell 脚本支持从命令行接收参数,位置变量是用于存储这些参数的特殊变量。它们使脚本能够动态处理不同的输入。
以下是一些常见位置变量及其用途:
$0
:当前脚本的文件名(包含路径)。$1
、$2
...$n
:命令行传递的第 1、2...n 个参数。$*
:以单个字符串显示所有参数。$@
:以独立的字符串形式显示所有参数。$#
:传递的参数个数。$?
:上一条命令的退出状态码(0 表示成功)。$$
:当前运行脚本的进程 ID。
使用位置变量进行参数传递
编写脚本 params.sh
:
bash
echo "脚本名:$0"
echo "第一个参数:$1"
echo "所有参数(字符串):$*"
echo "所有参数(独立):$@"
echo "参数个数:$#"
运行脚本:
bash
sh params.sh arg1 arg2
输出结果:
plaintext
脚本名:params.sh
第一个参数:arg1
所有参数(字符串):arg1 arg2
所有参数(独立):arg1 arg2
参数个数:2
运算符
算术运算符
在 Shell 中进行算术运算时,运算符前后必须留有空格 ,且某些特殊字符(如 *
)需要转义。这是因为 Shell 使用空格作为命令和参数的分隔符,同时对某些符号具有特殊含义,因此必须严格按照语法规则操作。
以下是详细解释:
-
运算符前后需有空格
Shell 中的
expr
命令会将每个部分(运算数和运算符)作为独立的参数解析,因此必须确保运算符前后有空格。例如:bashexpr 1 + 2 # 正确 expr 1+2 # 错误
如果没有空格,Shell 会将整个表达式视为一个字符串,而非分离的参数,从而导致解析错误。
-
括号、星号等特殊字符需转义
-
*
(星号)是 Shell 中的通配符,用于匹配文件名。因此,在算术运算中使用*
表示乘法时,必须进行转义:bashexpr 5 \* 3 # 正确 expr 5 * 3 # 错误,未转义的 * 被解析为通配符
-
其他特殊字符,如
()
、|
、&
等,也可能需要转义,具体取决于上下文中的含义。例如,括号通常用于分组运算,但未经转义时可能会触发子 Shell 的执行。
-
-
关于 Shell 的算术解析规则
Shell 中许多运算工具(如
expr
、$((..))
、let
)依赖不同的解析方式。例如:-
expr
是一个命令,需要通过命令参数传递表达式,因此空格和转义是必要的。 -
$((..))
内部则不需要转义或空格,写法更简洁:bashresult=$((5 * 3)) # 正确,乘法无需转义
-
let
与$((..))
类似,操作符无需转义,但也需注意空格:bashlet "result = 5 * 3" # 正确
-
逻辑运算符
Shell 支持以下逻辑运算符,常用于条件判断:
&&
:逻辑与||
:逻辑或!
:逻辑非
以下为运用逻辑运算符进行条件判断的示例:
bash
if [ -d /tmp ] && [ -w /tmp ]; then
echo "/tmp 存在且可写"
else
echo "/tmp 不存在或不可写"
fi
字符串运算符
Shell 提供多种用于操作和比较字符串的运算符:
-
获取字符串长度
bashstr="hello" echo ${#str} # 输出 5
-
字符串截取
bashecho ${str:1:3} # 输出 ell,从索引 1 开始截取 3 个字符
-
字符串比较
=
:判断字符串是否相等。!=
:判断字符串是否不相等。
bashif [ "$str" = "hello" ]; then echo "字符串相等" fi
小结
通过掌握环境变量、位置变量与运算符的用法,可以大幅提升 Shell 脚本编写效率,同时更深入地理解操作系统的运行机制。无论是自动化任务还是系统管理,灵活使用这些工具都是成功的关键。
最后,再次感谢您阅读本篇文章,如果您对文中内容有任何疑问或建议,欢迎在评论区与我交流!您的点赞和分享将是我继续创作的动力。