鍍金池/ 教程/ Linux/ shell變量
Linux 學習記錄--開機掛載錯誤
日志系統(tǒng)
數(shù)據(jù)流重定向
內(nèi)存交換空間的構(gòu)建
文件系統(tǒng)簡介
Linux 學習記錄--軟件安裝 RPM|SRPM|YUM
文件特殊權(quán)限
目錄配置 FHS
文件內(nèi)容查閱
Boot Loader
文件壓縮
Linux 學習記錄--文件權(quán)限
Linux 命令縮寫
命令與文件的查詢
文件|目錄的默認權(quán)限與隱藏權(quán)限
shell script
服務(wù)
Linux 學習記錄--程序編譯與函數(shù)庫
正則表達式與其應(yīng)用
關(guān)機相關(guān)指令
shell
vim 與 vi 常用命令
系統(tǒng)調(diào)用:進程控制
文件系統(tǒng)簡單操作
磁盤掛載與卸載
有名管道通訊
磁盤分區(qū),格式化與檢驗
工作管理與進程管理
匿名管道通訊
Linux 學習記錄--啟動流程
文件與目錄管理
管道命令
命名別名與歷史命令
文件備份|還原
shell變量
Linux 學習記錄--ACL 權(quán)限控制
內(nèi)核|內(nèi)核模塊編譯
文件管理相關(guān)系統(tǒng)編程

shell變量

變量操作

變量顯示(echo)

語法:echo $var

變量設(shè)置

語法:var=value

變量的設(shè)置規(guī)則

1.變量兩端不能直接接空格符
2.變量名稱只能是因為字母與數(shù)字,但開頭不能使數(shù)字
3.雙引號內(nèi)的特殊字符如$等,保持原本特性
[root@bogon ~]# var="lang is $LANG"
[root@bogon ~]# echo %var
root@bogon ~]# echo $var
lang is zh_CN.UTF-8
1.單引號內(nèi)的特殊字符則僅為一般字符
[root@bogon ~]#
[root@bogon ~]# var='lang is $LANG';echo $var
lang is $LANG
2.在一串命令中,還需要通過其他命令提供的信息,可用單引號‘命令’或&(命令),舉例:指令1在執(zhí)行的過程中需要先知道指令2的的值,但是指令1,2在一串指令中
[root@bogon ~]# uname -r
2.6.18-371.el5
[root@bogon ~]# cd /lib/modules/$(uname -r)/kernel
[root@bogon kernel]#
3.變量的累加
[root@bogon kernel]# var=${var}yes
[root@bogon kernel]# echo $var
lang is $LANGyes
4.數(shù)組變量設(shè)置與讀取
[root@bogon ~]# array[1]=a
[root@bogon ~]# array[2]=b
[root@bogon ~]# array[3]=c
[root@bogon ~]# echo ${array[1]}
a
[root@bogon ~]# echo ${array[2]}
b
[root@bogon ~]# echo ${array[3]}
c

取消變量(unset)

語法: unset var

變量查看(set)

語法:set

比較重要的幾個自定義變量
HISTFILE:歷史記錄存儲位置
MAILCHECK:多少秒掃描次郵箱,查看是否有新郵件
PS1:提示符設(shè)置
$:目前這個 shell 的 PID
?:剛才執(zhí)行完命令的回傳碼。0為正確,非0為錯誤

舉例:

[root@bogon kernel]# echo $$
11874  =>PID
[root@bogon kernel]# echo &?
[1] 22131
bash: ?: command not found
[root@bogon kernel]# echo $?
127 =>上一個命令執(zhí)行錯誤,回傳碼非0
[root@bogon kernel]# echo $?
0 =>上一個命令執(zhí)行正確,回傳碼為0

變量鍵盤讀取(read)

語法:read [-pt] var
選項與參數(shù):
-p:后可跟提示信息
-t:后跟等待輸入的描述
舉例:

[root@bogon ~]# read atest
this is a test
[root@bogon ~]# echo $atest
this is a test
[root@bogon ~]# read -p "please input.. " attest  
please input.. hello world      =>提示信息
[root@bogon ~]# echo $atest
hello world
[root@bogon ~]# read -p "please input.. " -t 5  atest
please input..  =>5秒未輸入回到命令行模式
[root@bogon ~]# 
[root@bogon ~]# echo $atest
hello world

變量聲明(declare)

語法:declare [-aixr] var
選項與參數(shù)
declare 后不接任何內(nèi)容,代表查詢所有變量,作用和 set 一致
-a :將后面名為 variable 的變量定義成為數(shù)組 (array)類型
-i :將后面名為 variable 的變量定義成為整數(shù)數(shù)字 (integer)類型
-x :用法與 export 一樣,就是將后面的 variable 變成環(huán)境變量;
+x :將環(huán)境變量變?yōu)樽远x變量
-r :將變量配置成為 readonly 類型,該變量不可被更改內(nèi)容,也不能 unset(需要注銷后再登陸才能變回)
舉例:

[root@bogon ~]# echo $sum
100+50+10 =>默認當做字符串處理
[root@bogon ~]# declare -i sum=100+50+10 
[root@bogon ~]# echo $sum
160 =>聲明為int 因此可以做加法
[root@bogon ~]# declare -x sum
[root@bogon ~]# export | grep sum
declare -ix sum="160" =>查詢到是環(huán)境變量
[root@bogon ~]# declare +x sum
[root@bogon ~]# export | grep sum= >查詢不到是環(huán)境變量
[root@bogon ~]# declare -r sum;sum=test
bash: sum: readonly variable =>只讀允許修改

變量內(nèi)容刪除

語法
${var#/key}:從前往后刪除符合 key 最短的那一個
${var##/key}:從前往后刪除符合 key 最長的那一個
${var%/key}:從后往前刪除符合 key 最短的那一個
${var%%/key}:從后往前刪除符合 key 最短的那一個
舉例:${var#/key}

[root@bogon ~]# path=${PATH};echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@bogon ~]# echo ${path#/*:}        =>key為*.(*為通配符)
/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

舉例:${var##/key}

[root@bogon ~]# path=${PATH};echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@bogon ~]# echo ${path##/*:}
/root/bin

變量內(nèi)容替換

語法:
${var/舊字符串/新字符串}:替換第一個滿足條件的字符串
${var//舊字符串/新字符串}:替換所有滿足條件的字符串
舉例:${var/舊字符串/新字符串}

root@bogon ~]# path=${PATH};echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@bogon ~]# echo ${path/sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

舉例:${var//舊字符串/新字符串}

[root@bogon ~]# path=${PATH};echo $path
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
[root@bogon ~]# echo ${path//sbin/SBIN}
/usr/kerberos/SBIN:/usr/kerberos/bin:/usr/local/SBIN:/usr/local/bin:/SBIN:/bin:/usr/SBIN:/usr/bin:/usr/X11R6/bin:/root/bin

命令內(nèi)容的獲取

將一些命令的輸出內(nèi)容存入變量

語法:$(command)
舉例:

[root@localhost tmp]# wc /etc/passwd
  46   74 2219 /etc/passwd
[root@localhost tmp]# var=$(wc /etc/passwd)
[root@localhost tmp]# echo $var
46 74 2219 /etc/passwd

$與 echo 的理解
$負責是讀取,echo 負責顯示

以 Int a= 5對比 var 好比是 a
$var是讀取 a 的值也就是5
echo &var 就是將5顯示出啦

對于變量的連接:
[root@localhost tmp]# str1=hello
[root@localhost tmp]# str2=world

[root@localhost tmp]# var=$str1$str2
$str1將 str1的值也就是 hello 讀取出來
$str2將 str2的值也就是 world 讀取出來
var=$str1$str2 將連個值連接

環(huán)境變量

普通變量可以理解為局部變量,環(huán)境變量可以理解為全局變量,登陸成功獲得的 bash shell 就是一個進程,在此情況下再去打開一個新 SHELL 就是他的子進程,子進程是無法獲取父進程的自定義變量,但是可以獲取父進程的環(huán)境變量

環(huán)境變量導(dǎo)出(export )

語法:export var

環(huán)境變量查看(env )

語法:env
比較重要的幾個環(huán)境變量
HOME:代表用戶的主文件夾
SHELL:代表目前使用的 shell 是哪個程序,我現(xiàn)在使用的是/bin/bash
HISTSIZE:歷史記錄最大存儲條數(shù)
MAIL:mail命令系統(tǒng)收信時,系統(tǒng)會讀取的信箱文件
PATH:執(zhí)行文件查找路徑
LANG:語系信息
RANDOM:隨機數(shù)變量(0~32767)

提示符的設(shè)置(PS1)

變量 PS1='[\u@\h \W]\$ '記錄了命令提示符的顯示格式 [root@bogon ~]#
符號意義
\d :可顯示出[星期月日]的日期格式,如:"Mon Feb 2"
\H :完整的主機名。
\h :僅取主機名在第一個小數(shù)點之前的名字
\t :顯示時間,為 24小時格式的[HH:MM:SS]
\T :顯示時間,為 12小時格式的[HH:MM:SS]
\A :顯示時間,為 24小時格式的[HH:MM]
\@ :顯示時間,為 12小時格式的[am/pm]樣式
\u :目前使用者的賬號名稱,如[root];
\v :BASH的版本信息,如鳥哥的測試主板本為 3.2.25(1),僅取[3.2]顯示
\w :完整的工作目錄名稱,由根目錄寫起的目錄名稱。但家目錄會以 ~取代;
\W :利用 basename 函數(shù)取得工作目錄名稱,所以僅會列出最后一個目錄名。
# :下達的第幾個命令。
\$ :提示字符,如果是 root 時,提示字符為 #,否則就是 $
舉例:
[root@bogon ~]# PS1='[\u@\h\A \W #]\$ '
[root@bogon23:45 ~ 82]#