小鸟初学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的传入参数的值。
小鸟初学Shell编程(八)环境变量、预定义变量与位置变量的更多相关文章
- [Shell]Bash变量:自定义变量 & 环境变量 & 位置参数变量 & 预定义变量
--------------------------------------------------------------------------------- 变量是计算机内存的单元,其中存放的值 ...
- Shell系列(12)- 预定义变量(5)
预定义变量 作用 $? 常用:最后一次执行的命令的返回状态. 如果这个变量的值为0,证明上一个命令正确执行:如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了 $$ ...
- 小鸟初学Shell编程(七)变量引用及作用范围
变量引用 那么定义好变量,如何打印变量的值呢?举例下变量引用的方式. ${变量名}称作为对变量的引用 echo ${变量名}查看变量的值 ${变量名}在部分情况下可以省略成 $变量名 [root@li ...
- 小鸟初学Shell编程(六)变量赋值
变量的意义 我们在使用Linux命令或脚本的时候,会有一些输出,那么这些输出的信息可以用变量临时存储,以备我们下一条命令或脚本使用. 变量的定义 变量的定义建议用一个有意义的英文单词来代表变量,不要使 ...
- 小鸟初学Shell编程(四)管道符
管道作用 管道实际上就是进程之间的一个通信工具,那么用在Linux命令中主要是方便两条命令互相之间可以相互通信. 管道符 管道符(匿名管道)是Shell编程经常用到的通信工具. 管道符是"| ...
- 小鸟初学Shell编程(一)认识Shell
开篇介绍 Linux里非常的有用的一个功能,这个功能就叫Shell脚本. Shell脚本在我日常开发工作里也占了非常重要的角色,项目中一些简单的工作我们都可以使用Shell脚本来完成,比如定时删除日志 ...
- 小鸟初学Shell编程(九)环境变量变量配置文件
介绍 在上一篇使用完了环境变量,并且知道PATH环境变量概念,那么我们对命令的执行就有了一定深入的理解.那么PATH环境变量或其他环境变量是保存在哪呢?那么这篇文章主要介绍环境变量配置文件. 配置文件 ...
- 小鸟初学Shell编程(五)输入输出重定向
重定向作用 一个进程默认会打开标准输入.标准输出.错误输出三个文件描述符. 重定向可以让我们的程序的标准输出.错误输出的信息重定向文件里,那么这里还可以将文件的内容代替键盘作为一种标准输入的方式. 重 ...
- 小鸟初学Shell编程(三)脚本不同执行方式的影响
执行命令的方式 执行Shell脚本的方式通常有以下四种 方式一:bash ./test.sh 方式二:./test.sh 方式三:source ./test.sh 方式四:. ./test.sh 执行 ...
随机推荐
- 微信小程序访问webservice(wsdl)+ axis2发布服务端(Java)
0.主要思路:使用axis2发布webservice服务端,微信小程序作为客户端访问.步骤如下: 1.服务端: 首先微信小程序仅支持访问https的url,且必须是已备案域名.因此前期的服务器端工作需 ...
- 2018年最新Java面试题及答案整理
基础篇 基本功 面向对象特征 封装,继承,多态和抽象 封装封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在 Java 当中,有 3 种修饰符: pub ...
- BayaiM__oracle切换归档模式步骤:
BayaiM__oracle切换归档模式(步骤): ------------------oracle11g设置归档模式和非归档模式--------------------------[root@tes ...
- day7_面向对象特性
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/7/12 14:50 # @Author : 大坏男孩 # @File : d ...
- [C2P2] Andrew Ng - Machine Learning
##Linear Regression with One Variable Linear regression predicts a real-valued output based on an in ...
- golang 服务端和客户端(二)
1.golang服务端 package main import( "net/http" ) func main(){ //注册处理函数,用户连接,自动调用指定的处理函数 http. ...
- python将xml文件数据增强(labelimg)
在处理faster-rcnn和yolo时笔者使用labelimg标注图片 但是我们只截取了大概800张左右的图,这个量级在训练时肯定是不够的,所以我们需要使用数据增强(无非是旋转加噪调量度)来增加我们 ...
- Leetcode53_Spiral_Matrix
Spiral_Matrix https://leetcode-cn.com/problems/spiral-matrix/ //当行数只有一行: 1. n = 1; m -> 0; //当列数只 ...
- 剑指Offer-21.栈的压入、弹出序列(C++/Java)
题目: 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈 ...
- Special-Judge模板
SPJ模板 放一篇\(SPJ\)(\(Special-Judge\))的模板. 注意,仅适用于\(Lemon\). 并不适用于洛谷. 代码:@zcs0724 #include <bits/std ...
