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 ~]#
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章