小鸟初学Shell编程(八)环境变量、预定义变量与位置变量
环境变量
环境变量:每个Shell打开都可以获得到的变量。
我们知道通过export
的方式打开可以让子进程读取父进程的变量的值,那怎么样才能让每一个进程都能读取到变量的值呢?
在这呢,系统有一些默认的配置文件,把变量嵌入到配置文件就可以了。
那么,系统已经自带了哪些环境变量呢?我们可以通过env
这个命令,查看系统中内置的环节变量。
[root@lincoding ~]# env
HOSTNAME=lincoding
SHELL=/bin/bash
……
SSH_TTY=/dev/pts/0
USER=root
……
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
LANG=en_US.UTF-8
SHLVL=1
HOME=/root
LOGNAME=root
……
由于环节变量太多了,省略一部分。以上都是系统的环境变量,新的终端打开,以上的变量都会被初始化完成。
可以通过变量的引用查看单独某个的环境变量的值,环境变量的都是大写为主。
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@lincoding ~]# echo $SHELL
/bin/bash
PATH
系统环境变量是定义了命令的搜索路径,SHELL
是定义了系统默认的Shell是bash。
PATH环境变量
PATH
系统环境变量是定义了命令的搜索路径,意思就是我们输入的Linux命令,都会在PATH
变量定义的路径里寻找,若存在则执行命令,若不存在则报错命令不存在。
其实所谓的不存在,就是在搜索路径里没有找到对应的命令。
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
假设要增加自定义的搜索路径,则可以通过下面的方式
[root@lincoding ~]# PATH=$PATH:/home
[root@lincoding ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home
不过上面的方式,新增的自定义路径是PATH变量,只在当前终端作用范围生效,其他进程是不生效的。
预定义变量
预定义变量有$?、$$、$0三个
- $?表示的是上一条命令执行的状态码,0代表正常,非0代表出错
[root@lincoding home]# cd /home/
[root@lincoding home]# echo $?
0
[root@lincoding home]# cd /file
-bash: cd: /file: No such file or directory
[root@lincoding home]# echo $?
1
- $$查看当前进程的pid
[root@lincoding home]# echo $$
18136
- $0表示当前进程的名称
[root@lincoding home]# echo $0
-bash
Shell脚本里使用上述三个预定义变量,脚本如下:
#!/bin/bash
# PID
echo $$
echo $0
执行效果:
[root@lincoding home]# ./test.sh
702
./test.sh
[root@lincoding home]# . test.sh
18136
-bash
[root@lincoding home]# source test.sh
18136
-bash
根据不同的执行方式,那么$0产生的名称也不同。
位置参数
位置参数用于读取执行Shell脚本时传入的参数的值,形式如下:
- $1 参数一
- $2 参数二
- $3 参数三
以此类推,当参数10以上的时候,需要注意一下, 需要用${10}、${11}方式。
举个例子,如下Shell脚本:
#!/bin/bash
# $1 $2 $3 ... $9 ${10}
echo $1
echo $2
echo $3
执行结果:
[root@lincoding home]# ./test.sh a b c
a
b
c
这里介绍一下获取传入Shell脚本参数的总个数可以用$#
,如下例子:
#!/bin/bash
echo $#
执行结果:
[root@lincoding home]# ./test.sh
0
[root@lincoding home]# ./test.sh a
1
[root@lincoding home]# ./test.sh a b
2
[root@lincoding home]# ./test.sh a 123 b
3
小结
本节主要介绍了环境变量的特殊性,PATH
环境变量定义的就是命令的搜索路径,若想知道其他环境变量,可以使用env
命令查看。
预定义变量是系统已经预定义好的变量,分别是$?、$$、$0。并且还可以通过位置变量$1
$2
$3
... 来获取Shell的传入参数的值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异