表示方法 | 描述 |
---|---|
$n | $1 表示第一個參數(shù),$2 表示第二個參數(shù) ... |
$# | 命令行參數(shù)的個數(shù) |
$0 | 當(dāng)前程序的名稱 |
$? | 前一個命令或函數(shù)的返回碼 |
$* | 以"參數(shù)1 參數(shù)2 ... " 形式保存所有參數(shù) |
$@ | 以"參數(shù)1" "參數(shù)2" ... 形式保存所有參數(shù) |
$$ | 本程序的(進(jìn)程ID號)PID |
$! | 上一個命令的PID |
#!/bin/sh#This file is used to explain the shell system variable.echo "the number of parameter is $# ";echo "the return code of last command is $?";echo "the script name is $0 ";echo "the parameters are $* ";echo "\$1 = $1 ; \$2 = $2 ";
下面是運行結(jié)果:
BeautifierPlugin Error: Unable to handle "bash" syntax.
-bash-2.05b$ ./chapter2.1.sh winter stlchinathe number of parameter is 2the return code of last command is 0the script name is ./chapter2.1.shthe parameters are winter stlchina$1 = winter ; $2 = stlchina
這個例子太簡單了,一點也不實用,下面來個實用的,如果你看不懂,沒有關(guān)系,后面的內(nèi)容會有詳細(xì)解釋。 BeautifierPlugin Error: Unable to handle "bash" syntax.
#!/bin/shif [ $# -ne 2 ] ; thenecho "Usage: $0 string file";exit 1;figrep $1 $2 ;if [ $? -ne 0 ] ; thenecho "Not Found \"$1\" in $2";exit 1;fiecho "Found \"$1\" in $2";
上面的例子中使用了$0 $1 $2 $# $? 等變量,下面是程序的解釋:
下面運行的例子:
BeautifierPlugin Error: Unable to handle "bash" syntax.
./chapter2.2.sh usage chapter2.2.shNot Found "usage" in chapter2.2.sh-bash-2.05b$ ./chapter2.2.sh Usage chapter2.2.shecho "Usage: $0 string file";Found "Usage" in chapter2.2.sh
用戶定義的變量必須由字母數(shù)字及下劃線組成,并且變量名的第一個字符不能為數(shù)字, 與其它UNIX名字一樣,變量名是大小寫敏感的. 對于用戶變量,用戶可按如下方式賦值: BeautifierPlugin Error: Unable to handle "bash" syntax.
name="Winter"
name="Winter"WINTER=$nameecho "Hello $WINTER !"
這里需要注意一點:變量和‘=‘之間不要有空格,‘=‘和賦值也不要有空格,否則shell不會認(rèn)為變量被定義。掌握了基本的使用方法,你可以完全開始你的編程工作了。不過有時候需要未雨綢繆,下面介紹用戶變量的一些技巧。
SAT=Saturecho Today is ${SAT}day
有時候為了避免變量名和別的字符產(chǎn)生混淆,你最好養(yǎng)成習(xí)慣把變量名用{}括起來。
對于未賦值的變量, Shell以空值對待, 用戶也可以用unset命令清除給變量賦的值.看一個例子: BeautifierPlugin Error: Unable to handle "bash" syntax.
#!/bin/shecho "a=$a" ;a=2echo "a=$a" ;unset aecho "a=$a" ;
-bash-2.05b$ ./test.sha=a=2a=
#!/bin/shecho "a=$a" ;#下面增加了readonlyreadonly a=2echo "a=$a" ;unset aecho "a=$a" ;
-bash-2.05b$ ./test.sha=a=2a=2
shell有兩種賦值方式,第一種是直接用下標(biāo)賦值: BeautifierPlugin Error: Unable to handle "bash" syntax.
name[0]="Tom"name[1]="Tomy"name[2]="John"...
#!/usr/local/bin/bashname=("Tom" "Tomy" "John")for i in 0 1 2doecho $i:${name[$i]} ;done;
-bash-2.05b$ ./test.sh0:Tom1:Tomy2:John
名稱 | 描述 |
PATH | 命令搜索路徑,以冒號為分隔符.注意與DOS下不同的是, 當(dāng)前目錄不在系統(tǒng)路徑里 |
HOME | 用戶home目錄的路徑名,是cd命令的默認(rèn)參數(shù) |
COLUMNS | 定義了命令編輯模式下可使用命令行的長度 |
EDITOR | 默認(rèn)的行編輯器 |
VISUAL | 默認(rèn)的可視編輯器 |
FCEDIT | 命令fc使用的編輯器 |
HISTFILE | 命令歷史文件 |
HISTSIZE | 命令歷史文件中最多可包含的命令條數(shù) |
HISTFILESIZE | 命令歷史文件中包含的最大行數(shù) |
IFS | 定義SHELL使用的分隔符 |
LOGNAME | 用戶登錄名 |
指向一個需要SHELL監(jiān)視其修改時間的文件.當(dāng)該文件修改后, SHELL將發(fā)消息You hava mail給用戶 | |
MAILCHECK | SHELL檢查MAIL文件的周期,單位是秒 |
MAILPATH | 功能與MAIL類似.但可以用一組文件,以冒號分隔,每個文件后可跟一個問號和一條發(fā)向用戶的消息 |
SHELL | SHELL的路徑名 |
TERM | 終端類型 |
TMOUT | SHELL自動退出的時間,單位為秒,若設(shè)為0則禁止SHELL自動退出 |
PROMPT_COMMAND | 指定在主命令提示符前應(yīng)執(zhí)行的命令 |
PS1 | 主命令提示符 |
PS2 | 二級命令提示符,命令執(zhí)行過程中要求輸入數(shù)據(jù)時用 |
PS3 | select的命令提示符 |
PS4 | 調(diào)試命令提示符 |
MANPATH | 尋找手冊頁的路徑,以冒號分隔 |
LD_LIBRARY_PATH | 尋找?guī)斓穆窂?以冒號分隔 |
這些變量,要關(guān)注的最多的就是PATH, 其重要性不要我說了吧?
如果你希望把你定義的變量讓其他所有的shell程序都能使用,也就是定義新的環(huán)境變量。你只要使用export關(guān)鍵詞就可以了。例如: BeautifierPlugin Error: Unable to handle "bash" syntax.
export MY_NAME=Winterexport PATH=/home/winter/bin:$PATH
~/.bash_profile