shell 变量

 

一、变量

变量是用来存储非固定值的载体

定义的语法为 name=[value]   # 注意name和value之间不要有空格

调用方法为 $变量名

例:

[root@VM_0_3_centos ~]# Name=tomcat
[root@VM_0_3_centos ~]# echo $Name
tomcat
  • 他拥有一个值和多个属性
  • 如果没有值,会被赋值为空字符串  declare 变量名
  • 变量名称由数字、字符及下划线组成,其中数字不能出现在首字母中
  • 在定义变量名的过程中建议全部为大写或者首字母大写
  • 我们可以通过typeset来为变量提供只读
[root@VM_0_3_centos ~]# Name=huangwei
[root@VM_0_3_centos ~]# echo $Name
huangwei
[root@VM_0_3_centos ~]# typeset -r Name
[root@VM_0_3_centos ~]# Name=hw
-bash: Name: readonly variable

还可以从标准的输入设备中输入变量的值:

[root@VM_0_3_centos ~]# read time
asd 
[root@VM_0_3_centos ~]# echo $time
asd

可以使用-p这个选项来添加相应的提示信息

[root@VM_0_3_centos ~]# read -p "please input your password" password
please input your password123
[root@VM_0_3_centos ~]# echo $password
123

可以通过set来查看当前的所有变量  

使用 unset 变量名 来删除变量

二、变量的使用范围

通过name=[value]来定义的变量的变量范围为当前的shell,在其他的shell中不能调用

如果在其他的shell中需要使用,则需要使用 export 命令,export命令会将变量放入环境变量中,也可以将普通环境变量转换为环境变量。

删除环境变量与普通变量相同,使用 unset

例:

[root@VM_0_3_centos ~]# Test=test   #在当前shell中定义变量Test
[root@VM_0_3_centos ~]# echo $Test  # 打印变量
test
[root@VM_0_3_centos ~]# bash # 进入到另一个shell中   
[root@VM_0_3_centos ~]# echo $Test  # 打印Test,发现为空字符串

[root@VM_0_3_centos ~]# exit #退出子shell,进入当前shell
exit
[root@VM_0_3_centos ~]# export Test #将Test变更为环境变量
[root@VM_0_3_centos ~]# bash #进入新的shell中
[root@VM_0_3_centos ~]# echo $Test #打印变量
test

三、环境变量

环境变量的设置位于/etc/profile文件

 按变量的生存周期来划分,Linux变量可分为两类: 
1.1 永久的:需要修改配置文件,变量永久生效。 
1.2 临时的:使用export命令声明即可,变量在关闭shell时失效2.设置变量的三种方法 

2.1 在/etc/profile文件中添加变量【对所有用户生效(永久的)】 
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。 
例如:编辑/etc/profile文件,添加CLASSPATH变量 
# vi /etc/profile 
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 
注:修改文件后要想马上生效还要运行# source /etc/profile不然只能在下次重进此用户时生效。 
2.2 在用户目录下的.bash_profile文件中增加变量【对单一用户生效(永久的)】 
用VI在用户目录下的.bash_profile文件中增加变量,改变量仅会对当前用户有效,并且是“永久的”。 
例如:编辑guok用户目录(/home/guok)下的.bash_profile 
$ vi /home/guok/.bash.profile 
添加如下内容: 
export CLASSPATH=./JAVA_HOME/lib;$JAVA_HOME/jre/lib 
注:修改文件后要想马上生效还要运行$ source /home/guok/.bash_profile不然只能在下次重进此用户时生效。 
2.3 直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】 
在shell的命令行下直接使用[export 变量名=变量值] 定义变量,该变量只在当前的shell(BASH)或其子shell(BASH)下是有效的,shell关闭了,变量也就失效了,再打开新shell时就没有这个变量,需要使用的话还需要重新定义。 

3.环境变量的查看 
3.1 使用echo命令查看单个环境变量。例如: 
echo $PATH 
3.2 使用env查看所有环境变量。例如: 
env 
3.3 使用set查看所有本地定义的环境变量。 
unset可以删除指定的环境变量。 

4 常用的路径

PATH 决定了shell将到哪些目录中寻找命令或程序 

  Linux是通过PATH来搜索命令的,PATH中存放的是一个目录的集合。当输入命令后,系统会遍历目录寻找指令并执行

  在修改环境变量时不建议直接修改,可以通过追加的方式修改。PATH=$PATH:/root # 在PATH中追加root目录
HOME 当前用户主目录 
HISTSIZE 历史记录数 
LOGNAME 当前用户的登录名 
HOSTNAME 指主机的名称 
SHELL 当前用户Shell类型 
LANGUGE  语言相关的环境变量,多语言可以修改此环境变量 
MAIL 当前用户的邮件存放目录 
PS1 基本提示符,对于root用户是#,对于普通用户是$

源:https://www.cnblogs.com/renping/p/7020354.html

四、位置变量

主要是向脚本中传递数据,变量名不能自定义,变量作用是固定的

$n:$0代表命令本身,$1-9代表接受的第1-9个参数,10以上需要用{}括起来,比如${10}代表接收的第10个参数
$*:接收所有的参数,将所有参数看作一个整体
$@:接收的所有参数,将每个参数区别对待
$#:代表接收的参数个数
$$:当前进程的ID号码
$?:程序的退出代码,0表示成功,非0为失败

五 变量的展开替换

下面四组变量的展开替换主要用于来确定变量是否为正确的被设置

${varname:-word} # 如果varname存在且非null,则返回值,否则返回word
${varname:=word} # 如果varname存在且非null,则返回值,否则设置为word
${varname:?word} # 如果varname存在且非null,则返回值,否则设置为varname:word
${varname:+word} # 如果varname存在且非null,则word,否则返回null

下面的六组变量展开应用于需要对变量的值做修改后输出的场景

${variable#key} # 从头开始删除关键字,执行最短匹配
${variable##key} # 从头开始删除关键字,执行最长匹配
${variable/key} # 从尾删除关键字,执行最短匹配
${variable//key} # 从尾开始删除关键字,执行最长匹配

  

 

posted @ 2019-06-28 16:32  _HuangWei  阅读(299)  评论(0编辑  收藏  举报