shell變量的分類及定義

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 NAME
HOSTNAME=localhost.localdomain
NAME=nihao    //設置成功,但是此種方式不能永久生效
USERNAME=root
LOGNAME=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 $USER
root
[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]# env
XDG_VTNR=1
XDG_SESSION_ID=1
DBUS_STARTER_ADDRESS=unix:abstract=/tmp/dbus-MQJKrUWfi8,guid=5a9152fe944f715e8f75d17d5868e73d
GPG_AGENT_INFO=/run/user/0/keyring-LQZGWn/gpg:0:1
VTE_VERSION=3406
XDG_MENU_PREFIX=gnome-
SHELL=/bin/bash
TERM=xterm-256color
WINDOWID=33554438
GNOME_KEYRING_CONTROL=/run/user/0/keyring-LQZGWn
QT_GRAPHICSSYSTEM_CHECKED=1
USER=root

<3>用unset消除本地變量或環境變量(unset 時不用加$符號)

[root@localhost SHELL]# export NAME=MMMMM    //設置環境變量
[root@localhost SHELL]# env | grep NAME      //查找環境變量NAME
NAME=MMMMM
USERNAME=root
LOGNAME=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 $c
192.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 $c
192.168.1.2-123456
[root@localhost SHELL]# c=192.168.1.2-$`echo $d`
[root@localhost SHELL]# echo $c
192.168.1.2-$123456
[root@localhost SHELL]#

變量名=’value’

通過單引號定義變量;輸出變量內容時單引號裏面是什麼就輸出什麼,即使內容中有變量和命令也會將它們原樣輸出。

變量名=”value”

通過雙引號定義變量,輸出變量時引號裏的變量及命令(要反引下)會經過解析後才輸出該變量的內容,而不是將引號中的變量或命令原樣輸出。

shell中變量名及變量內容的要求:

變量名 一般是由字母,數字,下劃線組成。一般以字母或下劃線開頭,但是數字不可以。

變量名的輸出:

$變量名錶示變量輸出,使用$變量名 或者 ${變量名} 是等同的。

[root@localhost SHELL]# a=192.168.1.2
[root@localhost SHELL]# echo $a
192.168.1.2
[root@localhost SHELL]# b='192.168.1.2'
[root@localhost SHELL]# echo $b
192.168.1.2
[root@localhost SHELL]# c="192.168.1.2"
[root@localhost SHELL]# echo $c
192.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 $ddddd
test1.sh test.sh UNIX.shell範例精解(第4版).pdf
[root@localhost SHELL]# ls
test1.sh  test.sh  UNIX.shell範例精解(第4版).pdf
[root@localhost SHELL]# e=$(ls)
[root@localhost SHELL]# echo $e
test1.sh test.sh UNIX.shell範例精解(第4版).pdf
[root@localhost SHELL]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章