当前位置: 首页 > Linux

小鸟初学Shell编程(八)环境变量、预定义变量和位置变量

时间:2023-04-06 18:25:35 Linux

EnvironmentVariables环境变量:每次打开Shell时可以获得的变量。我们知道通过export打开可以让子进程读取父进程变量的值,那么如何让每个进程都读取到变量的值呢?这里,系统有一些默认的配置文件,只是在配置文件中嵌入了变量。那么,系统已经有了哪些环境变量呢?我们可以使用env命令查看系统内置的链接变量。[root@lincoding~]#envHOSTNAME=lincodingSHELL=/bin/bash...SSH_TTY=/dev/pts/0USER=root...PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binLANG=en_US.UTF-8SHLVL=1HOME=/rootLOGNAME=root...因为链接变量太多,省略了一部分。以上是系统的环境变量。当打开一个新终端时,上述变量将被初始化。可以通过变量引用查看单个环境变量的值,环境变量都是大写的。[root@lincoding~]#echo$PATH/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin[root@lincoding~]#echo$SHELL/bin/bashPATH系统环境变量定义了命令的搜索路径,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@lincodinghome]#cd/home/[root@lincodinghome]#echo$?0[root@lincodinghome]#cd/file-bash:cd:/file:Nosuchfileordirectory[root@lincodinghome]#echo$?1$$查看当前进程的pid[root@lincodinghome]#echo$$18136$0表示进程名称当前进程[root@lincodinghome]#echo$0-bashShell脚本中使用了以上三个预定义变量,脚本如下:#!/bin/bash#PIDecho$$echo$0执行效果:[root@lincodinghome]#./test.sh702./test.sh[root@lincodinghome]#.test.sh18136-bash[root@lincodinghome]#sourcetest.sh18136-bash根据不同的执行方式,然后$0生成的名字也是不同的。位置参数位置参数用于读取shell脚本执行时传入的参数值,形式如下:$1参数一$2参数二$3参数三以此类推,当参数超过10个时,需要注意的是,需要使用${10}、${11}方法。例如下面的Shell脚本:#!/bin/bash#$1$2$3...$9${10}echo$1echo$2echo$3执行结果:[root@lincodinghome]#./test.shabcabchere介绍一下,可以使用$#获取传入的shell脚本参数总数,例如:#!/bin/bashecho$#执行结果:[root@lincodinghome]#./test.sh0[root@lincodinghome]#./test.sha1[root@lincodinghome]#./test.shab2[root@lincodinghome]#./test.sha123b3总结本节主要介绍环境变量的特殊性,PATH环境变量定义的是命令的搜索路径。如果想了解其他环境变量,可以使用env命令查看。预定义变量是系统预先定义好的变量,它们是$?、$$、$0。而Shell的传入参数的值也可以通过位置变量$1$2$3....