shell变量的定义(二)

一、变量的定义

变量就是在内存中分配一块区域将这块区域起一个名字这个名字就是变量名,然后将用户赋予的数据存入到这块区域内这个内容就是变量内的数据,通俗来讲的话就是使用一个比较简单的名字来替换一个比较复杂或者容易变动的名字。(最大的好处就是方便)

二、在shell中变量的种类

1.环境变量

1)环境变量的定义:环境变量就相当于全局变量,作用于所有shell环境中,PATH、LANG等都是环境变量,用于定义shell的环境。
2)环境变量的有效范围:在所有的bash环境中都可以使用。
2)环境变量的功能:env(观察环境变量与常用环境变量说明)、set(查看所有变量,包括环境变量与自定义变量)。

#env详解
XDG_SESSION_ID=2								#会话的key
HOSTNAME=localhost.localdomain				#主机名
SELINUX_ROLE_REQUESTED=						#selinux的模式
TERM=xterm										#终端的使用环境x window
SHELL=/bin/bash								#当前使用shell
HISTSIZE=1000									#记录命令的条数
SSH_CLIENT=10.0.0.254 51967 22				#使用SSH客户端的信息
SELINUX_USE_CURRENT_RANGE=					#selinux限制usr的应用范围
SSH_TTY=/dev/pts/1							#SSH访问的终端是哪个
USER=root										#当前使用者的名称
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:...	#颜色显示
MAIL=/var/spool/mail/root						#mail的存放目录
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin		#环境变量
PWD=/root										#当前的工作目录
LANG=en_US.UTF-8								#当前使用编码语系
SELINUX_LEVEL_REQUESTED=						#selinux的水平要求
HISTCONTROL=ignoredups						#控制命令历史的输入内容
												# ignoredups 只能剔除连续的重复条目
												#erasedups清除整个命令历史中的重复条目
SHLVL=1											#当前的shell嵌套层次,初始为1
HOME=/root										#当前使用者的加目录
LOGNAME=root									#登录账号为root
XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share
SSH_CONNECTION=10.0.0.254 51967 10.0.0.2 22	#SSH登录的端口号IP以及目的地址端口
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env									#上一次使用的命令最后参数

2.自定义变量

1)自定义变量的定义:用户自己定义的变量,是临时的只会作用在当前的bash进程中。
2)有效范围:只在创建变量的进程中使用

3.区别

1)子进程会继承父进程的环境变量,但是不会继承父进程的自定义变量。
2)区别验证

```bash
#验证自定义变量
[root@localhost ~]# a='My name is Tom'
#赋值方法
[root@localhost ~]# echo $a
My name is Tom
#输出结果
[root@localhost ~]# bash
#创建一个新的bash
[root@localhost ~]# echo $a
#在新的子进程内变量a为空

#验证环境变量
[root@localhost ~]# export a='My name is Tom'
#使用export将a定义为环境变量
[root@localhost ~]# echo $a
My name is Tom
[root@localhost ~]# bash
[root@localhost ~]# echo $a
My name is Tom     
#创建新的子进程后变量a内还是有值

三、变量的设置规则

1)	变量与变量内容以 = 号连接
例:name=Tom

2)	变量名称不能以数字开头
例错误示范:2name=Tom
	输出结果:sh: 2name=Tom: 未找到命令...

3)	变量内容若有空格可以用【””】或【’’】括起
例:name=cheng" "long
	输出结果:cheng long

4)	双引号的特殊字符可以保留原本的特性
例:var="lang is $LANG"
	输出结果:lang is zh_CN.UTF-8

5)	单引号内的特殊字符则为一般字符(纯文本)
例:var='lang is $LANG'
	输出结果:lang is $LANG

6)	使用反单引号【`命令`】或【$(命令)】格式让命令内的内容赋给另一个变量
例:version=$(uname -r)
	输出结果:3.10.0-862.el7.x86_64
例:进入内核模块
	cd /lib/modules/$(uname -r)/kernel

7)	声明全局变量export [变量名]
例:export version
	作用:在bash中输入bash启动另一个bash后也可以获得全局变量内的值
	仅执行export时会把定义变量列出来

8)	取消变量unset [变量名]
例:unset version
	作用:释放该变量在系统内存中占据的存储空间

四、语系变量locale

语系:影响交互式命令行界面显示的英文还是中文或者是其他语言
1)locale -a —>查看所有支持语系
2)locale —>查看现在的编码结果

输出结果:
LANG=		--->主语言的环境
...
LC_ALL=		--->整体语系的环境
#设置LANG和LC_ALL这两个变量,其他变量就会被替换
#配置目录:/etc/locale.conf
#转换语系:export LC_ALL=en_US.utf8; locale

五、变量键盘读取read

可以与用户以交互式的方式进行变量赋值

  1. read [-pt] variable
    -p:添加提示信息
    -t:等待秒数
  2. 例:
[root@localhost ~]# read -p "请输入你的名字:" -t 10 a
请输入你的名字:成龙
[root@localhost ~]# echo $a
成龙

六、变量的声明declare、typeset

声明变量的类型并使其具有一定的特性(数组、整数、全局、只读)
1)declare [-aixr] variable
-a:将变量定义为array数组类型
-i:将变量定义为integer整数类型
-x:将变量定义为export环境变量类型
-r:将变量定义为readonly类型,该变量不能被更改类型,也不能unset释放掉
-p:单独列出变量的类型
2)例:

#整数类型
[root@localhost ~]# sum=10+20+30
[root@localhost ~]# declare -p sum
	declare -- sum="10+20+30"
	#查看类型为默认类型(字符串)
[root@localhost ~]# echo $sum
	10+20+30
[root@localhost ~]# declare -i sum=10+20+30
[root@localhost ~]# echo $sum
	60
[root@localhost ~]# declare -p sum
	declare -i sum="60"
	#类型变为-i整数类型
#使用sum直接赋值则会输出字符串,而转换成整数类型后,输出的就是计算结果
#变量类型默认字符串
#bash环境中的数值运算,默认只能达到整数类型,1/3等于0

#只读类型(readonly)
[root@localhost ~]# declare -r sum=10+10+20
[root@localhost ~]# declare -p sum
	declare -r sum="10+10+20"
[root@localhost ~]# unset sum
	bash: unset: sum: 无法反设定: 只读 variable
#定义为只读变量后,必须要注销才可以释放此变量
原创文章 20 获赞 7 访问量 702

猜你喜欢

转载自blog.csdn.net/adsedfewf/article/details/105870149
今日推荐