shell变量的分类及定义

来源:互联网 发布:农村淘宝发展现状 编辑:程序博客网 时间:2024/04/28 00:26

shell变量的类型:

shell变量分环境变量(全局变量)和普通变量(局部变量)

环境变量亦称为全局变量,可以在建立它们的shell及其派生出来的任意子进程shell中使用;环境变量又分为自定义环境变量和Bash内置的环境变量。

普通变量亦称为局部变量,只能在创建它们的shell函数或shell脚本中使用,一般由开发者用户创建。

环境变量的作用:一般用于定义shell的运行环境,保证shell命令的正确执行,Shell通过环境变量来确定登陆用户名,命令路径,终端类型,登陆目的等。

环境变量的创建:可以在命令行中设置创建,但用户退出命令行时这些变量值就会丢失,因此,若希望永久保存环境变量,可在用户家目录下的 .bash_profile 或者 .bashrc 文件中或全局配置 /etc/bashrc 或 /etc/profile 文件或 /etc/profile.d/ 中定义。将环境变量放在这些文件中,每次用户登陆时这些变量值都会被初始化一次。

一般,环境变量都为大写,使用export命令导出定义环境变量

内置的环境变量,如HOME, PATH, SHELL, UID,USER,HOSTNAME 等,都是在用户登陆之前就已经被/bin/login程序设置好了。

自定义的环境变量: 如果想要设置环境变量,就要在给变量赋值之后或设置变量时使用export命令。带-x选项的declare内置命令也可以完成同样的功能。(注意:输出变量时不要在变量名前加$)

自定义环境变量的设置方法:
<1> export 变量名=value

[root@localhost SHELL]# export NAME=nihao[root@localhost SHELL]# env | grep NAMEHOSTNAME=localhost.localdomainNAME=nihao    //设置成功,但是此种方式不能永久生效USERNAME=rootLOGNAME=root[root@localhost SHELL]# 要想让其生效必须将其放在用户的环境变量( .bashrc.bash_profile )或者全局的环境变量( /etc/profile 或 /etc/bashrc 或 /etc/profile.d )

<2> 变量名=value : export 变量名

<3> declare -x 变量名=value (很少用)

对环境变量的操作:

<1>用echo或者printf打印环境变量(注意:输出环境变量时,要加$符号)

[root@localhost SHELL]# echo $USERroot[root@localhost SHELL]# printf $HOME/root[root@localhost SHELL]# printf "$HOME\n"/root[root@localhost SHELL]# $HOME  用户登陆时进入的目录$UID   当前用户的UID(用户标识)相当于 id-u$PWD   当前工作目录的绝对路径名$SEHLL  当前shell$USER   当前用户

<2>用env(printenv) 或者set显示环境变量
一般不用set,set的显示比较乱

[root@localhost SHELL]# envXDG_VTNR=1XDG_SESSION_ID=1DBUS_STARTER_ADDRESS=unix:abstract=/tmp/dbus-MQJKrUWfi8,guid=5a9152fe944f715e8f75d17d5868e73dGPG_AGENT_INFO=/run/user/0/keyring-LQZGWn/gpg:0:1VTE_VERSION=3406XDG_MENU_PREFIX=gnome-SHELL=/bin/bashTERM=xterm-256colorWINDOWID=33554438GNOME_KEYRING_CONTROL=/run/user/0/keyring-LQZGWnQT_GRAPHICSSYSTEM_CHECKED=1USER=root

<3>用unset消除本地变量或环境变量(unset 时不用加$符号)

[root@localhost SHELL]# export NAME=MMMMM    //设置环境变量[root@localhost SHELL]# env | grep NAME      //查找环境变量NAMENAME=MMMMMUSERNAME=rootLOGNAME=root[root@localhost SHELL]# unset NAME          //删除环境变量[root@localhost SHELL]# echo $NAME          //打印环境变量,没有输出,说明删除环境变量成功[root@localhost SHELL]# 

普通变量的定义:

变量名=value

直接定义变量内容的方法;输出变量内容时会将变量内容里的变量或命令(要反引下)解析之后再输出,一般为简单连续的数字,字符串,路径名等,如果内容中有空格等特殊字符,则不能完整输出,需要改加双引号

[root@localhost SHELL]# d=123456[root@localhost SHELL]# c="192.168.1.2-$d"[root@localhost SHELL]# c=192.168.1.2-$d[root@localhost SHELL]# echo $c192.168.1.2-123456[root@localhost SHELL]# //变量内容中有命令要反引下 反引符号为 ``[root@localhost SHELL]# d=123456[root@localhost SHELL]# c="192.168.1.2-$d"[root@localhost SHELL]# c=192.168.1.2-$d[root@localhost SHELL]# echo $c192.168.1.2-123456[root@localhost SHELL]# c=192.168.1.2-$`echo $d`[root@localhost SHELL]# echo $c192.168.1.2-$123456[root@localhost SHELL]#

变量名=’value’

通过单引号定义变量;输出变量内容时单引号里面是什么就输出什么,即使内容中有变量和命令也会将它们原样输出。

变量名=”value”

通过双引号定义变量,输出变量时引号里的变量及命令(要反引下)会经过解析后才输出该变量的内容,而不是将引号中的变量或命令原样输出。

shell中变量名及变量内容的要求:

变量名 一般是由字母,数字,下划线组成。一般以字母或下划线开头,但是数字不可以。

变量名的输出:

$变量名表示变量输出,使用$变量名 或者 ${变量名} 是等同的。

[root@localhost SHELL]# a=192.168.1.2[root@localhost SHELL]# echo $a192.168.1.2[root@localhost SHELL]# b='192.168.1.2'[root@localhost SHELL]# echo $b192.168.1.2[root@localhost SHELL]# c="192.168.1.2"[root@localhost SHELL]# echo $c192.168.1.2[root@localhost SHELL]# echo "a=$a"a=192.168.1.2[root@localhost SHELL]# echo "b=$b"b=192.168.1.2[root@localhost SHELL]# echo "c=${c}"c=192.168.1.2[root@localhost SHELL]# export NAME=MMMMM[root@localhost SHELL]# echo "${NAME}"MMMMM[root@localhost SHELL]# 连续普通字符串赋值给变量,不管是否使用了引号(单引号或双引号),内容是什么,就会打印出什么但是当不是连续的普通字符串时:[root@localhost SHELL]# a=192.168.1.2-$a[root@localhost SHELL]# echo "a=$a"a=192.168.1.2-192.168.1.2[root@localhost SHELL]# b='192.168.1.2-$a'[root@localhost SHELL]# echo "b=$b"b=192.168.1.2-$a[root@localhost SHELL]# c="192.168.1.2-$a"[root@localhost SHELL]# echo "c=${c}"c=192.168.1.2-192.168.1.2-192.168.1.2[root@localhost SHELL]# echo "c=$c"c=192.168.1.2-192.168.1.2-192.168.1.2[root@localhost SHELL]# 

把命令的结果作为变量内容的定义方法

变量名=命令 //命令用反引号包裹
变量名=$(命令)

[root@localhost SHELL]# ddddd=`ls`[root@localhost SHELL]# echo $dddddtest1.sh test.sh UNIX.shell范例精解(第4版).pdf[root@localhost SHELL]# lstest1.sh  test.sh  UNIX.shell范例精解(第4版).pdf[root@localhost SHELL]# e=$(ls)[root@localhost SHELL]# echo $etest1.sh test.sh UNIX.shell范例精解(第4版).pdf[root@localhost SHELL]# 
1 0
原创粉丝点击