SHELL中的變數 運行SHELL腳本中的單個命令自然有用,但這有其自身的限制。通常你會需要在SHELL命令使用其他數據來處理信息。這可以通過變數來實現。變數允許你臨時性地將信息存儲在SHELL腳本中,以便和腳本中的其他命令一起使用。 1 環境變數 SHELL維護著一組環境變數,用了記錄特點的系統信 ...
SHELL中的變數
運行SHELL腳本中的單個命令自然有用,但這有其自身的限制。通常你會需要在SHELL命令使用其他數據來處理信息。這可以通過變數來實現。變數允許你臨時性地將信息存儲在SHELL腳本中,以便和腳本中的其他命令一起使用。
1 環境變數
SHELL維護著一組環境變數,用了記錄特點的系統信息。比如系統的名稱、登錄到系統上的用戶名、用戶的預設家目錄以及SHELL查找程式的搜索路徑。可以用set命令來顯示一份完整的當前環境變數。
[root@local data]# set |head -30
ABRT_DEBUG_LOG=/dev/null
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
BASH_COMPLETION_COMPAT_DIR=/etc/bash_completion.d
[. . . ]
在腳本中,你可以在環境變數名稱前加上美元符 $ 來使用這些環境變數。
例如:
[root@local data]# echo $HOME /root
2 用戶變數
處理環境變數,SHELL腳本中還允許在腳本中定義和使用自己的變數。定義變數允許臨時存儲數據併在整個腳本中使用,從而使SHELL腳本看起來更像一個真正的程式。
用戶變數定義規則:可以用字母、數字、下劃線組成的文本字元串。長度不超過20個。用戶變數區分大小寫。
使用等號將賦值給用戶變數。註意:在變數、等號和值之間不能出現空格。
例如:var1=10,MYNAME=xiaoming。
(1)SHELL會自動決定變數值得數據類型。在腳本的整個生命周期中,SHELL 腳本中定義的變數會一直保持著它們的值,但在SHELL結束時會被刪除。
(2)變數每次被引用時,都會輸出當前賦給它的值。引用一個變數是需要使用美元符"$",二引用變數來對其進行賦值時則不要使用美元符。
3 只讀變數
只能聲明,但是不能修改和刪除。
聲明只讀變數:
readonly name
declare -r name
查看只讀變數: readonly -p
4 位置變數
在腳本代碼中調用命令行傳遞給腳本的參數
$1、$2……:對應第1、2….個參數,shift[n] 換位置
$0:腳本本身
$*:傳遞給腳本的所有參數,全部參數合為一個字元串
$@:傳遞給腳本的所有參數,每個參數為獨立的字元串
$#:傳遞給腳本的參數的個數
註意:$@、$* 只有在被雙括弧擴起來的時候才有差異
set – - 清空所有位置變數
5 命令替換
SHELL腳本中最有用的特性之一就是可以從命令輸出中提取信息,並將其值賦給變數。把輸出賦給變數之後,就可以隨意在腳本中使用了。
有兩種方法可以將命令輸出賦給變數:
- 反引號 ( ` )
- $( ) 格式。
例如: testing=`date`
或者testing=$(date)
在腳本通過命令替換獲得當前日期並用來生成唯一文件名。
#!/bin/bash
#
today=$( date +%Y-%m-%d-%H:%M:%S)
ls /root/123 -al >log.$today