我们一起学shell之三:shell变量讲解

今天我们来学习shell变量相关的内容。

在实际工作中,无论linux下还是windows下,变量都是实时使用并且相关的。

在linux服务器下,我们查看环境变量或系统变量使用的常用命令:
env或set

env显示用户环境变量,set显示Shell预先定义好的变量以及用户变量。

env
或
set

在这里插入图片描述

3.1. 来,我们来列举几个shell中常用的系统变量相关内容

$SHELL 本服务器的默认Shell
$HOME 当前用户的home目录
$LANG 服务器默认语言
$PATH 默认程序可执行程序路径
$PWD 当前目录
$UID 当前用户ID
$USER 当前用户
$RANDOM 随机生成一个0至32767的整数(为什么是这个段位的呢?)
$HOSTNAME 主机名

我们来分别查看,查看命令形式:echo + 变量。全部执行一遍查看结果,不要手懒!
在这里插入图片描述
由于$RANDOM是生成随机数的变量,我多输入了几次,大家可以看到,输出了3个不同的数字。

3.2 普通变量(common variables)与临时环境变量(Temporary Variable)的区别

普通变量定义:VAR=value
临时环境变量定义:export VAR=value
变量引用:$VAR

下面看下他们之间区别:
Shell进程的环境变量作用域是Shell进程,也就是当前的shell脚本执行的环境内。当export导入到系统变量时,则作用域是Shell进程及其Shell子进程。

ps axjf输出的第一列是PPID(父进程ID),第二列是PID(子进程ID)
我们来执行下命令看下结果。
在这里插入图片描述
所以在当前shell定义的变量一定要export,否则在写脚本时,会引用不到。
还需要注意的是退出终端后,所有用户定义的变量都会清除。

3.3位置变量

位置变量也被称之为位置参数(positional parameters),指的是函数或脚本后跟的第n个参数。

$1-$n:$1表示第1个参数、$2表示第2个参数等,$0为脚本的名字,需要注意:从${10}开始,参数号需要用花括号括起来,如${10}、${11}、${100}、…。$*和$@一样,表示从$1开始的全部参数。

好,我们来编写一个脚本进行测试说明

vi testvar.sh
#!/bin/bash
echo "sky : $1"
echo "fans : $2"
echo "NB : $3"
echo "666 : $4"

执行脚本:

sh testvar.sh

在这里插入图片描述
在上步中,我们执行脚本时未给予参数,下面我们给予参数进行输出内容

sh testvar.sh 1 2 3 4 

在这里插入图片描述

在执行脚本的时候,var.sh的脚本接受了我们传进去的4个参数,当shell解释一个命令时,会将位置变量与命令行中的每一个参数关联,第一个参数对应的就是"$1",第二个参数对应就是"$2",依次类推。

3.4特殊位置变量(shell脚本中)

$0 脚本自身名字(你命名的脚本的名字)
$? 返回上一条命令是否执行成功,0为执行成功,非0则为执行失败
$# 位置参数总数
$* 所有的位置参数被看做一个字符串
$@ 每个位置参数被看做独立的字符串
$$ 当前进程PID
$! 上一条运行后台进程的PID

3.4.1还是刚才的脚本,我们添加进去$0的内容

vi testvar.sh 
#!/bin/bash
echo $0
echo "sky : $1"
echo "fans : $2"
echo "NB : $3"
echo "666 : $4"

执行查看结果:

sh testvar.sh 1 2 3 4

在这里插入图片描述

3.4.2 其他的变量我们试下一起放入到脚本中,执行看会有什么结果出现。

重新编辑脚本

vi testvar.sh 
cho $0
echo "sky : $1"
echo "fans : $2"
echo "NB : $3"
echo "666 : $4"
echo "------华丽的分割线——————"
echo "上条命令执行成功了没(成功0,未成功非0) : $?"
echo "参数总数: $#"
echo "所有的位置参数被看做一个字符串 : $*"
echo "每个位置参数被看做独立的字符串 : $@"
echo "当前进程PID : $$"

执行结果:
在这里插入图片描述

哦?我们发现好像落掉了一个特殊位置变量,好那我们在加上,为了方便看出对比,我们这回在脚本中又添加了一个变量参数 $5

vi testvar.sh 
#!/bin/bash
echo $0
echo "sky : $1"
echo "fans : $2"
echo "NB : $3"
echo "666 : $4"
echo "777 : $5"
echo "------华丽的分割线——————"
echo "上条命令执行成功了没(成功0,未成功非0) : $?"
echo "参数总数: $#"
echo "所有的位置参数被看做一个字符串 : $*"
echo "每个位置参数被看做独立的字符串 : $@"
echo "当前进程PID : $$"
echo "上一条运行后台进程的PID : $!"

执行脚本看结果:

sh testvar.sh

在这里插入图片描述
汗!!忘了带参数了,重来!

sh testvar.sh 1 2 3 4 5

在这里插入图片描述
注意:给予参数的时候,中间一定要加空格,否则系统会理解为只给了一个参数内容。

sh testvar.sh 12345

在这里插入图片描述

这里执行后的结果我们发现没有后台进程的PID,原因是什么?对,就是因为我这里并没有执行后台运行的程序,后台运行的程序需要执行nohup命令。这里我们就不做过多演示!

今天的讲解就到这里!

猜你喜欢

转载自blog.csdn.net/xzm5708796/article/details/83823028
今日推荐