快速入门Shell编程(八)环境变量、预定义变量与位置变量

mac2022-06-30  81

环境变量

环境变量:每个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 、 {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的传入参数的值。

最新回复(0)