常见的变量有哪些:
通用环境变量
| 变量名 | 作用 | 示例值 |
|---|---|---|
PATH | 系统搜索可执行文件的目录路径。 | /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin |
HOME | 当前用户的主目录路径。 | /home/user |
USER | 当前登录用户名。 | kali |
SHELL | 当前使用的默认 Shell 程序路径。 | /bin/bash |
PWD | 当前工作目录的绝对路径。 | /home/kali/Desktop |
OLDPWD | 上一次工作的目录路径。 | /home/kali |
LANG | 系统默认的语言和字符编码设置。 | en_US.UTF-8 |
LC_ALL | 强制设置语言环境的值,覆盖其他语言变量(如 LANG 和 LC_*)。 | en_US.UTF-8 |
TERM | 当前终端类型,定义终端支持的功能和特性(如颜色)。 | xterm-256color |
DISPLAY | 图形用户界面的显示地址,用于 X11 窗口系统。 | :0 |
EDITOR | 默认文本编辑器,用于程序或命令(如 crontab -e)编辑文件。 | vim 或 nano |
HISTFILE | Shell 历史记录文件路径。 | /home/kali/.bash_history |
HISTSIZE | 终端历史记录的条目限制。 | 1000 |
LOGNAME | 当前登录用户名(通常与 USER 相同)。 | kali |
UID | 当前用户的用户 ID。 | 1000 |
2. Shell 特殊变量
脚本与命令行位置参数变量
| 变量名 | 作用 | 示例值 |
|---|---|---|
$0 | 当前脚本或命令的名称。 | ./myscript.sh |
$1...$n | 传递给脚本或命令的参数,$1 是第一个参数,$2 是第二个,依此类推。 | arg1, arg2 |
$# | 传递给脚本的参数个数。 | 2 |
$@ | 传递给脚本的所有参数(独立展开,每个参数独立显示)。 | arg1 arg2 |
$* | 传递给脚本的所有参数(作为单一字符串显示)。 | arg1 arg2 |
$? | 上一个命令的退出状态码(0 表示成功,非 0 表示失败)。 | 0 |
$$ | 当前脚本的进程 ID(PID)。 | 1234 |
$_ | 上一个命令的最后一个参数,或者最后执行的结果。 | /home/kali |
Shell 操作变量
| 变量名 | 作用 | 示例值 |
|---|---|---|
IFS | 内部字段分隔符,影响字符串的分割方式(默认空格、制表符和换行符)。 | IFS=$'\n' |
RANDOM | 每次调用生成一个介于 0 和 32767 之间的随机数。 | 20417 |
SECONDS | 返回 Shell 会话或脚本运行的时间(以秒为单位)。 | 360 |
LINENO | 当前脚本中的行号,便于调试和日志记录。 | 45 |
BASH_VERSION | 当前使用的 Bash Shell 的版本号。 | 5.1.0(1)-release |
3. 脚本与程序开发中的变量
在脚本和程序开发中,有一些常用的变量用于控制程序行为或实现特定功能。
特殊脚本变量
| 变量名 | 作用 | 示例值 |
|---|---|---|
INPUT | 定义脚本输入的默认文件路径。 | /home/kali/input.txt |
OUTPUT | 定义脚本输出文件路径。 | /home/kali/output.log |
DEBUG | 用于调试模式的开关变量。 | true |
CONFIG | 配置文件路径。 | /etc/myconfig.conf |
4. Kali Linux 特殊变量
Kali Linux 作为一个渗透测试和网络安全工具集,常见工具也会使用一些特定的变量。
| 变量名 | 作用 | 示例值 |
|---|---|---|
TOOL_HOME | 部分工具的安装目录路径。 | /usr/share/metasploit-framework 等 |
MSF_DATABASE | Metasploit Framework 的数据库连接配置。 | postgres://msf:password@localhost:5432/msf |
PROXYCHAINS_CONF | ProxyChains 的配置文件路径。 | /etc/proxychains.conf |
WEB_HOME | Web 服务的根目录路径,便于存储渗透测试中的 Web 文件。 | /var/www/html |
查看环境变量的一些方法:
1.eg、echo

2.which命令查看

设置临时变量:
![]()

意思是当执行一个程序时,会优先去root目录下查找,然后再按照PATH指定的目录顺序查找
如何将环境变量设置为永久变量:
将文件放入环境变量里,没有加入时

加入之后

计算字符长度:

注:这里有#和没#是有区别的
查看字符串的位数:

向脚本程序传递参数如何实现:
eg、
echo 执行的文件名是:$0
echo 第一个参数是:$1
echo 传递的参数作为一个字符串显示:$*
echo 传递的参数独立作为每个字符串显示:$@
echo 传递到脚本的参数个数是:$#
echo 最后推出的命令状态:$?
echo 脚本运行的当前进程ID是:$$
执行之后:

解释:
1.echo 执行的文件名是:$0
$0表示当前脚本的文件名,包含路径(如果有)。- 当脚本被执行时,这个变量会自动记录脚本的文件名。
- 示例:假如脚本文件名为
script.sh,则输出:执行的文件名是:script.sh
2. echo 第一个参数是:$1
$1表示传递给脚本的第一个参数。- 在执行脚本时,用户可以通过命令行传递参数,例如:
./script.sh arg1 arg2,其中arg1是第一个参数。 - 示例:假如运行命令
./script.sh hello,则输出:第一个参数是:hello
3. echo 传递的参数作为一个字符串显示:$*
$*表示所有传递给脚本的参数,作为一个单独的字符串显示(以空格分隔)。- 示例:假如运行命令
./script.sh arg1 arg2,则输出:传递的参数作为一个字符串显示:arg1 arg2
4. echo 传递的参数独立作为每个字符串显示:$@
$@表示所有传递给脚本的参数,与$*类似,但显示方式不同。- 当被引号
""包裹时:"$*"将所有参数当作一个整体,输出为一个字符串。"$@"将每个参数独立显示,保持参数原样。
- 当被引号
- 示例:假如运行命令
./script.sh arg1 arg2:"$*"的输出:arg1 arg2"$@"的输出(独立参数):arg1 arg2
5. echo 传递到脚本的参数个数是:$#
$#表示传递给脚本的参数数量。- 示例:假如运行命令
./script.sh arg1 arg2,则输出:传递到脚本的参数个数是:2
6. echo 最后退出的命令状态:$?
$?表示上一个命令的退出状态码:- 通常为
0表示成功。 - 非
0表示失败,数值可用于判断错误类型。
- 通常为
- 示例:假如上一条命令执行成功,则输出:
最后退出的命令状态:0
7. echo 脚本运行的当前进程ID是:$$
$$表示当前脚本的进程 ID(Process ID)。- 这是系统分配给当前脚本运行的唯一标识。
- 示例:假如当前脚本进程 ID 为
12345,则输出:脚本运行的当前进程ID是:12345
可以指定参数值传参

如何在shell编程中进行数学运算?
expr使用

乘法运算需要用转义字符:

使用括号也需要进行转义(注意空格):

除法运算:

取余运算:

变量与运算的结合使用:
反引号的使用

