8.7-shell变量(上) 自定义变量、变量名规则、变量的累加

前面也接触过环境变量 PATH ,它是 shell 预设的一个变量。通常, shell 预设的变量都是大写的。变量就是使用一个较简单的字符串来代替某些具有特殊意义的设定及数据。就拿 PATH 来讲,这个 PATH 就代替了所有常用命令的绝对路径的设定。有了 PATH 这个变量,我们在运行某个命令时,就不再需要输入全局路径,直接输入命令名即可。你可使用 echo 命令显示变量的值

PATH 、HOME 、PWD 、LOGNAME

[root@evan-01 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@evan-01 ~]# echo $HOME
/root
[root@evan-01 ~]# echo $PWD
/root
[root@evan-01 ~]# echo $LOGNAME
root
[root@evan-01 ~]# 

命令 env
使用 env 命令,可以列出系统预设的全部系统变量

[root@evan-01 ~]# env
XDG_SESSION_ID=1
HOSTNAME=evan-01
SELINUX_ROLE_REQUESTED=
TERM=vt100
SHELL=/bin/bash
HISTSIZE=5000
SSH_CLIENT=192.168.94.1 57264 22
SELINUX_USE_CURRENT_RANGE=
SSH_TTY=/dev/pts/0
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:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
SELINUX_LEVEL_REQUESTED=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=192.168.94.1 57264 192.168.94.128 22
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
_=/usr/bin/env
[root@evan-01 ~]#

登录不同的用户,这些环境变量的值也不同。当前显示的是 root 账户的环境变量

变量 含义
HOSTNAME 表示主机名称
SHELL 表示当前用户的 shell 类型
HISTSIZE 表示历史记录数
MAIL 表示当前用户的邮件存放目录
PATH 该变量决定了 shell 将到哪些目录中寻找命令或程序
PWD 表示当前目录
LANG 这是与语言相关的环境变量,多语言环境可以修改此环境变量
HOME 表示当前用户的家目录
LOGNAME 表示当前用户的登录名

evn 命令显示的变量只是环境变量,系统预设的变量其实还有很多,你可以使用 set 命令把系统预设的全部变量都显示出来

命令 set
set 命令和 env 命令类似,也可以输出环境变量

[root@evan-01 ~]# set

在这里插入图片描述

自定义变量
set 命令不仅可以显示系统预设的变量,也可以显示用户自定义的变量。比如我们自定义一个变量

[root@evan-01 ~]# myname=evan
[root@evan-01 ~]# echo $myname
evan
[root@evan-01 ~]# 

变量名规则
字母、数字下划线,首位不能为数字

[root@evan-01 ~]# a1=1
[root@evan-01 ~]# echo $a1
1
[root@evan-01 ~]# a_2=2
[root@evan-01 ~]# echo $a_2
2
[root@evan-01 ~]# _a3=3
[root@evan-01 ~]# echo $_a3
3
[root@evan-01 ~]# 4a=4
-bash: 4a=4: command not found
[root@evan-01 ~]# 

变量值有特殊符号时需要用单引号括起来
错误写法

[root@evan-01 ~]# a=a b c
-bash: b: command not found
[root@evan-01 ~]# 

正确写法

[root@evan-01 ~]# a='a b c'
[root@evan-01 ~]# echo $a
a b c
[root@evan-01 ~]# 

有特殊符号的用双引号不行

[root@evan-01 ~]# a="a$bc"
[root@evan-01 ~]# echo $a
a
[root@evan-01 ~]# 

有特殊符号的需要用单引号

[root@evan-01 ~]# a='a$bc'
[root@evan-01 ~]# echo $a
a$bc
[root@evan-01 ~]# 

变量的累加

[root@evan-01 ~]# a=1
[root@evan-01 ~]# b=2
[root@evan-01 ~]# echo $a$b
12
[root@evan-01 ~]# 
[root@evan-01 ~]# a='a$bc'
[root@evan-01 ~]# b=2
[root@evan-01 ~]# echo $a$b
a$bc2
[root@evan-01 ~]#
[root@evan-01 ~]# c="a$bc"
[root@evan-01 ~]# echo $c
a
[root@evan-01 ~]# 
[root@evan-01 ~]# a='a$bc'
[root@evan-01 ~]# b=2
[root@evan-01 ~]# echo $a$b
a$bc2
[root@evan-01 ~]# echo $c
a
[root@evan-01 ~]# c="a$b"c
[root@evan-01 ~]# echo $c
a2c
[root@evan-01 ~]# 
[root@evan-01 ~]# c=a"$b"c
[root@evan-01 ~]# echo $c
a2c
[root@evan-01 ~]#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章