•深入淺出Shell編程: Shell 變量
◦1 系統變量
◦2 Shell用戶變量
■2.1 基礎
■2.2 使用技巧
■2.3 shell 中的數組
◦3 shell 環境變量
先不要管Shell的版本,來看看Shell 變量,在Shell中有三種變量:系統變量,環境變量,用戶變量。其中用戶變量在編程過程中使用最多,系統變量在對參數判斷和命令返回值判斷會使用,環境變量主要是在程序運行的時候需要設置。
1 系統變量
Shell常用的系統變量并不多,但卻十分有用,特別是在做一些參數檢測的時候。下面是Shell常用的系統變量
表示方法 描述
$n $1 表示第一個參數,$2 表示第二個參數 ...
$# 命令行參數的個數
$0 當前程序的名稱
$? 前一個命令或函數的返回碼
$* 以"參數1 參數2 ... " 形式保存所有參數
$@ 以"參數1" "參數2" ... 形式保存所有參數
$$ 本程序的(進程ID號)PID
$! 上一個命令的PID
其中使用得比較多得是 $n $# $0 $? ,看看下面的例子:
用戶定義的變量必須由字母數字及下劃線組成,并且變量名的第一個字符不能為數字, 與其它UNIX名字一樣,變量名是大小寫敏感的. 對于用戶變量,用戶可按如下方式賦值:
name="Winter"
在引用變量時,需在前面加$符號,用戶也可以在變量間進行相互賦值,如:
name="Winter"
WINTER=$name
echo
"Hello $WINTER !"
輸出結果應該很清楚:Hello Winter !
這里需要注意一點:變量和'='之間不要有空格,'='和賦值也不要有空格,否則shell不會認為變量被定義。掌握了基本的使用方法,你可以完全開始你的編程工作了。不過有時候需要未雨綢繆,下面介紹用戶變量的一些技巧。
2.2 使用技巧
也可以用變量和其他字符組成新的字,這時可能需要把變量用{}括起,如:
SAT=Satur
echo
Today is ${SAT}day
輸出結果是: Today is Saturday
有時候為了避免變量名和別的字符產生混淆,你最好養成習慣把變量名用{}括起來。
對于未賦值的變量, Shell以空值對待, 用戶也可以用unset命令清除給變量賦的值.看一個例子:
shell有兩種賦值方式,第一種是直接用下標賦值:
name[0]="Tom"
name[1]="Tomy"
name[2]="John"
...
另一種方式對于不同的shell版本不一樣。bash中賦值:
[code]
#!/usr/local/bin/bash
name=("Tom" "Tomy" "John")
for i in 0 1 2
do echo $i:${name[$i]} ;
done
[html]
上面兩種賦值方式達到的效果一樣。另外,你看見訪問數組元素的方法了嗎?使用${name[index]}的方式。注意第一行使用的是#!/usr/local/bin/bash, 和以前有些不一樣哦。其輸出結果是:
-bash-2.05b$ ./test
.sh
0:Tom
1:Tomy
2:John
3 shell 環境變量
shell 環境變量是所有shell 程序都會接受的參數。shell程序運行時,都會接收一組變量,這組變量就是環境變量。常用的環境變量:
名稱 | 描述 |
PATH | 命令搜索路徑,以冒號為分隔符.注意與DOS下不同的是, 當前目錄不在系統路徑里 |
HOME | 用戶home目錄的路徑名,是cd命令的默認參數 |
COLUMNS | 定義了命令編輯模式下可使用命令行的長度 |
EDITOR | 默認的行編輯器 |
VISUAL | 默認的可視編輯器 |
FCEDIT | 命令fc使用的編輯器 |
HISTFILE | 命令歷史文件 |
HISTSIZE | 命令歷史文件中最多可包含的命令條數 |
HISTFILESIZE | 命令歷史文件中包含的最大行數 |
IFS | 定義SHELL使用的分隔符 |
LOGNAME | 用戶登錄名 |
指向一個需要SHELL監視其修改時間的文件.當該文件修改后, SHELL將發消息You hava mail給用戶 | |
MAILCHECK | SHELL檢查MAIL文件的周期,單位是秒 |
MAILPATH | 功能與MAIL類似.但可以用一組文件,以冒號分隔,每個文件后可跟一個問號和一條發向用戶的消息 |
SHELL | SHELL的路徑名 |
TERM | 終端類型 |
TMOUT | SHELL自動退出的時間,單位為秒,若設為0則禁止SHELL自動退出 |
PROMPT_COMMAND | 指定在主命令提示符前應執行的命令 |
PS1 | 主命令提示符 |
PS2 | 二級命令提示符,命令執行過程中要求輸入數據時用 |
PS3 | select的命令提示符 |
PS4 | 調試命令提示符 |
MANPATH | 尋找手冊頁的路徑,以冒號分隔 |
LD_LIBRARY_PATH | 尋找庫的路徑,以冒號分隔 |
新聞熱點
疑難解答