0.declare 命令
declare(選項)(參數)
選項:
+/-:"-"可用來指定變量的屬性,"+"則是取消變量所設的屬性; -f:僅顯示函數; r:將變量設置為只讀; x:指定的變量會成為環境變量,可供shell以外的程序來使用; i:[設置值]可以是數值,字符串或運算式。
參數:
shell變量:聲明shell變量,格式為“變量名=值”。
[root@VM_0_12_centos ~]# var1=var1value [root@VM_0_12_centos ~]# declare var2=var2value [root@VM_0_12_centos ~]# typeset var3=var3value [root@VM_0_12_centos ~]# echo $var1 var1value [root@VM_0_12_centos ~]# echo $var2 var2value [root@VM_0_12_centos ~]# echo $var3 var3value
[root@VM_0_12_centos ~]# declare -x var1=value1 [root@VM_0_12_centos ~]# env | grep var1 var1=value1
1.unset命令
unset(選項)(參數)
選項:
-f:僅刪除函數;
-v:僅刪除變量。
shell變量或函數:指定要刪除的shell變量或shell函數。
例如:刪除上面的var1,var2,var3,其中var1已經輸出為環境變量,var2和var3為普通shell變量。
[root@VM_0_12_centos ~]# echo $var1 value1 [root@VM_0_12_centos ~]# echo $var2 var2value [root@VM_0_12_centos ~]# echo $var3 var3value [root@VM_0_12_centos ~]# env | grep var1 #證明var1為環境變量 var1=value1 [root@VM_0_12_centos ~]# env | grep var2 [root@VM_0_12_centos ~]# env | grep var3 [root@VM_0_12_centos ~]# unset var1 [root@VM_0_12_centos ~]# unset var2 [root@VM_0_12_centos ~]# unset var3 [root@VM_0_12_centos ~]# env | grep var2 [root@VM_0_12_centos ~]# env | grep var1 [root@VM_0_12_centos ~]# echo $var3
添加一個環境變量並設置為只讀刪除不了環境變量
[root@VM_0_12_centos ~]# declare -x var6=value6 #聲明一個變量並輸出到環境變量 [root@VM_0_12_centos ~]# env | grep var6 var6=value6 [root@VM_0_12_centos ~]# readonly var6 #設置為只讀 [root@VM_0_12_centos ~]# unset var6 -bash: unset: var6: cannot unset: readonly variable
2.Set命令
set命令作用主要是顯示系統中已經存在的shell變量,以及設置shell變量的新變量值。使用set更改shell特性時,符號"+"和"-"的作用分別是打開和關閉指定的模式。set命令不能夠定義新的shell變量。如果要定義新的變量,可以使用declare命令以變量名=值
的格式進行定義即可。
語法:
set(選項)(參數)
選項:
-a:標示已修改的變量,以供輸出至環境變量。 -b:使被中止的后台程序立刻回報執行狀態。 -C:轉向所產生的文件無法覆蓋已存在的文件。 -d:Shell預設會用雜湊表記憶使用過的指令,以加速指令的執行。使用-d參數可取消。 -e:若指令傳回值不等於0,則立即退出shell。 -f:取消使用通配符。 -h:自動記錄函數的所在位置。 -H Shell:可利用"!"加<指令編號>的方式來執行history中記錄的指令。 -k:指令所給的參數都會被視為此指令的環境變量。 -l:記錄for循環的變量名稱。 -m:使用監視模式。 -n:只讀取指令,而不實際執行。 -p:啟動優先順序模式。 -P:啟動-P參數后,執行指令時,會以實際的文件或目錄來取代符號連接。 -t:執行完隨后的指令,即退出shell。 -u:當執行時使用到未定義過的變量,則顯示錯誤信息。 -v:顯示shell所讀取的輸入值。 -x:執行指令后,會先顯示該指令及所下的參數。
參數;
取消某個set曾啟動的參數。
實例:設置兩個環境變量並設置為環境變量
[root@VM_0_12_centos ~]# unset var1 #刪除shell變量 [root@VM_0_12_centos ~]# unset var2 [root@VM_0_12_centos ~]# unset var3 [root@VM_0_12_centos ~]# var1=value1 #定義shell變量的三種方式 [root@VM_0_12_centos ~]# declare var2=value2 [root@VM_0_12_centos ~]# typeset var3=value3 [root@VM_0_12_centos ~]# set -a var2 #將三個變量輸出為環境變量 [root@VM_0_12_centos ~]# set -a var3 [root@VM_0_12_centos ~]# set -a var1 [root@VM_0_12_centos ~]# env | grep var #查看環境變量 var1=value1 var3=value3 var2=value2
3.env命令
env命令用於顯示系統中已存在的環境變量,以及在定義的環境中執行指令。該命令只使用"-"作為參數選項時,隱藏了選項"-i"的功能。若沒有設置任何選項和參數時,則直接顯示當前的環境變量。
如果使用env命令在新環境中執行指令時,會因為沒有定義環境變量"PATH"而提示錯誤信息"such file or directory"。此時,用戶可以重新定義一個新的"PATH"或者使用絕對路徑。
語法:
env(選項)(參數)
選項;
-i:開始一個新的空的環境;
-u<變量名>:從當前環境中刪除指定的變量。
參數:
- 變量定義:定義在新的環境中變量,定義多個變量定義用空格隔開。格式為“變量名=值”;
- 指定:指定要執行的指令和參數。
例如:
查看環境變量
[root@VM_0_12_centos ~]# env | grep var var1=value1 var3=value3 var2=value2 MAIL=/var/spool/mail/root
4.export命令
export命令用於將shell變量輸出為環境變量,或者將shell函數輸出為環境變量。
一個變量創建時,它不會自動地為在它之后創建的shell進程所知。而命令export可以向后面的shell傳遞變量的值。當一個shell腳本調用並執 行時,它不會自動得到原為腳本(調用者)里定義的變量的訪問權,除非這些變量已經被顯式地設置為可用。export命令可以用於傳遞一個或多個變量的值到任何后繼腳本。
語法:
export(選項)(參數)
選項:
-f:代表[變量名稱]中為函數名稱; -n:刪除指定的變量。變量實際上並未刪除,只是不會輸出到后續指令的執行環境中; -p:列出所有的shell賦予程序的環境變量。
參數:
變量:指定要輸出或者刪除的環境變量。
例如:
[root@VM_0_12_centos ~]# export var1=value1 #定義一個環境變量 [root@VM_0_12_centos ~]# env|grep var var1=value1 MAIL=/var/spool/mail/root [root@VM_0_12_centos ~]# export var1=value11111 #修改上面的環境變量 [root@VM_0_12_centos ~]# env|grep var var1=value11111 MAIL=/var/spool/mail/root [root@VM_0_12_centos ~]# export -n var1 #刪除上面的環境變量,只是從環境變量中刪除,shell變量仍然存在 [root@VM_0_12_centos ~]# env|grep var MAIL=/var/spool/mail/root [root@VM_0_12_centos ~]#
6.readonly命令
readonly命令用於定義只讀shell變量和shell函數。readonly命令的選項-p可以輸出顯示系統中所有定義的只讀變量。
語法:
readonly(選項)(參數)
選項:
-f:定義只讀函數; -a:定義只讀數組變量; -p:顯示系統中全部只讀變量列表。
參數:
變量定義:定義變量,格式為“變量名=‘變量值’”。
例如:查看系統的只讀變量:
[root@VM_0_12_centos ~]# readonly -p declare -r BASHOPTS="checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath" declare -ir BASHPID declare -r BASH_COMPLETION_COMPAT_DIR="/etc/bash_completion.d" declare -ar BASH_VERSINFO='([0]="4" [1]="2" [2]="46" [3]="2" [4]="release" [5]="x86_64-redhat-linux-gnu")' declare -ir EUID="0" declare -ir PPID="11854" declare -r SHELLOPTS="braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor" declare -ir UID="0"
總結:
1.declare var=value 可以聲明一個shell變量(與之等價的是 var=value,typeset var=value),也可以直接用declare -x var=value 聲明一個變量並直接輸出到環境變量,也可以加上-r參數表示只讀變量。
2.unset var 可以刪除變量,包括shell變量和環境變量(當前用戶變量),不能夠刪除具有只讀屬性的shell變量和環境變量。
3.set -a var 可以將var變量輸出到環境變量
4.env可以查看所有的環境變量,可以加管道命令與grep命令過濾變量
5.export var=value用於定義一個環境變量,修改環境變量也是這個,等價於 declare -x var=name
export -n var 用於從環境變量刪除此變量,但是shell變量中此變量仍然存在。