环境变量

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


小鸟初学Shell编程(八)环境变量、预定义变量与位置变量的更多相关文章

  1. [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量

    --------------------------------------------------------------------------------- 变量是计算机内存的单元,其中存放的值 ...

  2. Shell系列(12)- 预定义变量(5)

    预定义变量 作用 $? 常用:最后一次执行的命令的返回状态. 如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 $$ ...

  3. 小鸟初学Shell编程(七)变量引用及作用范围

    变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...

  4. 小鸟初学Shell编程(六)变量赋值

    变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...

  5. 小鸟初学Shell编程(四)管道符

    管道作用 管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信. 管道符 管道符(匿名管道)是Shell编程经常用到的通信工具. 管道符是"| ...

  6. 小鸟初学Shell编程(一)认识Shell

    开篇介绍 Linux里非常的有用的一个功能,这个功能就叫Shell脚本. Shell脚本在我日常开发工作里也占了非常重要的角色,项目中一些简单的工作我们都可以使用Shell脚本来完成,比如定时删除日志 ...

  7. 小鸟初学Shell编程(九)环境变量变量配置文件

    介绍 在上一篇使用完了环境变量,并且知道PATH环境变量概念,那么我们对命令的执行就有了一定深入的理解.那么PATH环境变量或其他环境变量是保存在哪呢?那么这篇文章主要介绍环境变量配置文件. 配置文件 ...

  8. 小鸟初学Shell编程(五)输入输出重定向

    重定向作用 一个进程默认会打开标准输入.标准输出.错误输出三个文件描述符. 重定向可以让我们的程序的标准输出.错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式. 重 ...

  9. 小鸟初学Shell编程(三)脚本不同执行方式的影响

    执行命令的方式 执行Shell脚本的方式通常有以下四种 方式一:bash ./test.sh 方式二:./test.sh 方式三:source ./test.sh 方式四:. ./test.sh 执行 ...

随机推荐

  1. Django框架(二十二)-- Django rest_framework-解析器

    一.解析器的作用 根据请求头 content-type 选择对应的解析器对请求体内容进行处理,将传过来的数据解析成字典 二.使用解析器 1.局部使用 在视图类中重定义parser_classes即可, ...

  2. Ubuntu安装DaVinci Resolve

    安装DaVinci Resolve所需依赖 sudo apt install libssl1.0.0 ocl-icd-opencl-dev fakeroot xorriso 下载MakeResolve ...

  3. requests---重定向

    通常我们抓包的过程中,都会看到302的状态码,那么这个过程发生了什么? 什么是重定向 就是通过各种方法将各种网络请求重新定个方向转到其它位置,本来应该从a出发到达b但是最终到达了c,这种场景就叫做重定 ...

  4. Python入门基础学习(环境安装/字符串)

    Python基础学习笔记(一) 编译性语言与解释性语言: 编译性语言:读完代码再执行,一般会生成一个文件,如C语言会生成一个.h的文件给计算机执行 如:C,C++,C#,Java,Go 解释性语言:读 ...

  5. Node.js—基本知识

    一.第一个Node代码 1. 运行Node.js   通过node E:\Node代码\hello.js运行代码:Node.js是服务器的程序,写的js语句都将运行在服务器上.返回给客户的,都是已经处 ...

  6. 第十五周博客作业 <西北师范大学| 周安伟>

    第十五周作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求链接https://www.cnblogs.com/nwnu-daizh/p/10946673 ...

  7. Conda和Python的国内安装源

    Conda和Python的国内安装源 Windows系统: 更换python国内源的方法. 在"C:\Users[xxxx]\pip\pip.ini"文件中配置如下内容(没有则新建 ...

  8. 通过 Beautiful Soup 4 预防 XSS 攻击

    通过beautifulsoup4预防XSS攻击 借助beautifulsoup4将用户输入内容进行过滤 实际使用时需要采用单例模式 步骤: 实例化对象,对页面进行解析 查找目标标签 将非法标签进行清空 ...

  9. array 数组

  10. Spring Cloud Alibaba Sentinel对Feign的支持

    Spring Cloud Alibaba Sentinel 除了对 RestTemplate 做了支持,同样对于 Feign 也做了支持,如果我们要从 Hystrix 切换到 Sentinel 是非常 ...