變量
又分為環境變量和自定義變量
環境變量
使用 env 指令檢視
[api@kfxqtyglpt ~]$ env
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=10.190.179.212 60463 50023
SELINUX_USE_CURRENT_RANGE=
QTDIR=/usr/lib64/qt-3.3
QTINC=/usr/lib64/qt-3.3/include
SSH_TTY=/dev/pts/1
HISTORY_FILE=/var/log/usermonitor/usermonitor.log
JRE_HOME=/home/api/jdk1.7.0_25/jre
USER=api
MAVEN_HOME=/home/api/maven
MAIL=/var/spool/mail/api
PATH=/home/api/jdk1.7.0_25/bin:/home/api/maven/bin:/home/api/maven/bin:/home/api/jdk1.7.0_25/bin:/home/api/jdk1.7.0_25/jre/bin:/usr/local/nginx/sbin:/usr/lib64/qt-3.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/api/bin
JAVA_HOME=/home/api/jdk1.7.0_25
LANG=zh_CN.UTF-8
複制代碼
環境變量通常用全大寫的形式
自定義變量
[api@kfxqtyglpt ~]$ myname=nanhai13
複制代碼
注意等号兩邊不能有空格
檢視變量
[api@kfxqtyglpt ~]$ echo $myname
nanhai13
[api@kfxqtyglpt ~]$ echo ${myname}
nanhai13
複制代碼
推薦使用${}方式
特殊情況處理
- 資料内容有空格
- 用單引号或者雙引号括起來
- 或者用轉移字元\把空格轉義了
- [api@kfxqtyglpt ~]$ myname="nanhai 13" [api@kfxqtyglpt ~]$ echo ${myname} nanhai 13 [api@kfxqtyglpt ~]$ myname='nanhai 14' [api@kfxqtyglpt ~]$ echo ${myname} nanhai 14 [api@kfxqtyglpt ~]$ myname=nanhai\ 15 [api@kfxqtyglpt ~]$ echo ${myname} nanhai 15 複制代碼
- 資料内容中引用其他變量
- 用雙引号括起。不能用單引号
- [api@kfxqtyglpt ~]$ hello="hi ${myname}" [api@kfxqtyglpt ~]$ echo $hello hi nanhai 15 複制代碼
- 如果用單引号
- [api@kfxqtyglpt ~]$ hello='hi ${myname}' [api@kfxqtyglpt ~]$ echo $hello hi ${myname} 複制代碼
- 可以看出單引号和雙引号的差別了
- 資料内容中執行其他指令
- 使用$()可以執行指令
- [api@kfxqtyglpt ~]$ myversion=$(uname -r) [api@kfxqtyglpt ~]$ echo $myversion 2.6.32-431.el6.x86_64 複制代碼
檢視自定義變量
使用set指令。可以檢視所有環境變量和自定義變量
删除自定義變量
unset指令
其他
$本身也是個變量
[api@kfxqtyglpt ~]$ echo $
74292
複制代碼
'$'顯示目前shell的pid
?是上一個指令的結果
一般指令執行後都會回傳一個執行結果。
執行成功一般回傳0,如果執行出錯,會回傳錯誤碼。
[api@kfxqtyglpt ~]$ echo $?
0
[api@kfxqtyglpt ~]$ name=66 66
-bash: 66: command not found
[api@kfxqtyglpt ~]$ echo $?
127
複制代碼
将自定義變量導出為環境變量
使用export指令,注意沒有$符号
[api@kfxqtyglpt ~]$ export myname
複制代碼
使用env檢視
[api@kfxqtyglpt ~]$ env
...
myname=nanhai 15
...
複制代碼
我們登入linux,取得一個bash指令視窗,就是開啟了一個bash程式,這個bash有自己的pid
在這個shell下執行的所有指令都是這個shell程式的子程式
子程式會繼承父程式的環境變量,但是不會繼承父程式的自定義變量
[api@kfxqtyglpt ~]$ name=superman
[api@kfxqtyglpt ~]$ echo $name
superman
[api@kfxqtyglpt ~]$ bash ========>開啟一個bash子程式
[api@kfxqtyglpt ~]$ echo $name
[api@kfxqtyglpt ~]$ exit ========>傳回父程式
exit
[api@kfxqtyglpt ~]$ export name ========>export成環境變量
[api@kfxqtyglpt ~]$ bash
[api@kfxqtyglpt ~]$ echo $name
superman
複制代碼
讀取輸入值
編寫shell腳本時經常會用到需要擷取使用者輸入的功能。這就需要read指令
[api@kfxqtyglpt ~]$ read name
king
[api@kfxqtyglpt ~]$ echo ${name}
king
[api@kfxqtyglpt ~]$ read -p "輸入名字:" -t 10 name
輸入名字:aaaaa
[api@kfxqtyglpt ~]$ echo $name
aaaaa
複制代碼
read直接加變量名即可
參數-p可以加說明,-t是等待時間
聲明變量的類型
預設定義的變量都是字元串類型,是以
[api@kfxqtyglpt ~]$ sum=10+20
[api@kfxqtyglpt ~]$ echo ${sum}
10+20
複制代碼
聲明變量類型使用declare指令,參數
-a數組類型
-i整數類型
-x導出為環境變量
-r隻讀類型
[api@kfxqtyglpt ~]$ unset sum
[api@kfxqtyglpt ~]$ declare -i sum
[api@kfxqtyglpt ~]$ sum=10+20
[api@kfxqtyglpt ~]$ echo $sum
30
複制代碼
數組
直接使用中括号來定義即可,使用時需要用${}
[api@kfxqtyglpt ~]$ arr[0]=aa
[api@kfxqtyglpt ~]$ arr[1]=bb
[api@kfxqtyglpt ~]$ arr[2]=cc
[api@kfxqtyglpt ~]$ echo "${arr[0]},${arr[2]}"
aa,cc