變數
- 擷取本機主機名稱
#hostname
- 擷取本系統版本號碼
#uname -r
- 擷取cpu類型
- 擷取cpu的工作頻率
cat /proc/cpuinfo
- 擷取記憶體使用量情況
#free -m
- 擷取硬碟使用方式
#df
變數類型及變數操作
- 本地變數(一般所指)
本地變數只存在使用者當前shell中,當使用者退出當前shell或開器一個新的shell,所設定的變數將會不存在
設定變數
#變數名=變數值
顯示變數
#echo ${變數名}
假設a=1 顯示則 echo ${a}
- 環境變數(用的非常少)
環境變數用於所有使用者進程(經常稱為子進程)。登入進程稱為父進程。Shell中執行的使用者進程均稱為子進程。不像本地變數,環境變數可用於所有子進程,這包括編輯器、指令碼和應用
環境變數在使用者登出時會消失,因此最好在$HOME/.bash_profile(/etc/profile)檔案裡直接定義
- 位置變數(跟指令碼和函數有很大的關係)
位置變數表示$0,$1… …$9 (只有9個)
$0 |
$1 |
$2 |
$3 |
$4 |
$5 |
$6 |
$7 |
$8 |
$9 |
指令碼名字 |
A |
B |
C |
D |
E |
F |
G |
H |
I |
$0=當前指令碼名稱
向指令碼中使用位置參數
向系統命令傳遞參數
- 特殊變數
$# 傳遞到指令碼的參數列表個數
$* ($@) 以一個單字串顯示所有向指令碼傳遞的參數
$$ 指令碼啟動並執行當前進程ID號
$? 顯示最後命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。
引用的必要性
變數操作中,指令碼執行變數賦值時最容易犯的一個錯誤就是引用錯誤
例:echo abc *
echo abc ‘*'
echo Hit the star button to exit *
引用的方式
雙引號(“) (需要排除以下幾個)
使用雙引號可以引用除$、`、\、字元外的任一字元或字串
單引號(‘) (比較霸道,任何都可以轉成字元)
與雙引號類似,不同的是shell會忽略任何引用值。
換句話說,如果屏蔽了其特殊含義,會將引號裡的所有字元,都作為一個字串。
反引號(`) (將括弧內的當作命令來執行)
用於設定系統命令的輸出到變數。
shell將反引號中的內容作為一個系統命令,並執行其內容
反斜線(\)
如果一個字元有特殊含義,反斜線防止shell誤解其含義,即屏蔽其特殊含義。
下述字元包含有特殊意義:& * + ^ $ ` ” | ?
指令碼執行個體
- Hello.sh
#!/bin/bash
#This is the first script
echo “Hello,World!”
執行:
chmod u+x Hello.sh
./Hello.sh
- var.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo $10
- #!/bin/bash
echo –e “hostname\t `hostname`”
echo –e “OScore\t `uname -r`”
echo –e “CPUInfo\t `grep “model name” /proc/cpuinfo|awk –F: ‘{print $2}'`”
ehco –e “CPUMHz\t `grep “MHz” /proc/cpuinfo | awk –F: ‘{print $2}'`”
echo –e “MEMTotal\t `free | awk ‘$1=”Mem:”{print $2}'`”
echo –e “DiskInfo\t `df | grep dev |awk ‘{print $1 $2}'`”
回顧:
指令碼的結構與運行
變數的類型及用法
環境變數
本地變數
參數變數
特殊變數
變數賦值時的引用方法