Shell的基本語法

2021-05-24 00:46:32 字數 3137 閱讀 9041

按照慣例,shell變數由全大寫字母加下劃線組成,有兩種型別的shell變數:

環境變數

環境變數可以從父程序傳給子程序,因此shell程序的環境變數可以從當前shell程序傳給fork出來的子程序。用printenv命令可以顯示當前shell程序的環境變數。

本地變數

只存在於當前shell程序,用set命令可以顯示當前shell程序中定義的所有變數(包括本地變數和環境變數)和函式。

環境變數是任何程序都有的概念,而本地變數是shell特有的概念。在shell中,環境變數和本地變數的定義和用法相似。在shell中定義或賦值乙個變數:

$ varname=value
注意等號兩邊都不能有空格,否則會被shell解釋成命令和命令列引數。

乙個變數定義後僅存在於當前shell程序,它是本地變數,用export命令可以把本地變數匯出為環境變數,定義和匯出環境變數通常可以一步完成:

$ export varname=value
也可以分兩步完成:

$ varname=value

$ export varname

unset命令可以刪除已定義的環境變數或本地變數。

$ unset varname
如果乙個變數叫做varname,用$可以表示它的值,在不引起歧義的情況下也可以用$varname表示它的值。通過以下例子比較這兩種表示法的不同:

$ echo $shell

$ echo $shellabc

$ echo $shell abc

$ echo $abc

注意,在定義變數時不用$,取變數值時要用$。和c語言不同的是,shell變數不需要明確定義型別,事實上shell變數的值都是字串,比如我們定義var=45,其實var的值是字串45而非整數。shell變數不需要先定義後使用,如果對乙個沒有定義的變數取值,則值為空字串。

這些用於匹配的字元稱為萬用字元(wildcard),具體如下:

表 31.1. 萬用字元

*匹配0個或多個任意字元

?匹配乙個任意字元

[若干字元]

匹配方括號中任意乙個字元的一次出現

$ ls /dev/ttys*

$ ls ch0?.doc

$ ls ch0[0-2].doc

$ ls ch[012][0-9].doc

注意,globbing所匹配的檔名是由shell展開的,也就是說在引數還沒傳給程式之前已經展開了,比如上述ls ch0[012].doc命令,如果當前目錄下有ch00.docch02.doc,則傳給ls命令的引數實際上是這兩個檔名,而不是乙個匹配字串。

由反引號括起來的也是一條命令,shell先執行該命令,然後將輸出結果立刻代換到當前命令列中。例如定義乙個變數存放date命令的輸出:

$ date=`date`

$ echo $date

命令代換也可以用$()表示:

$ date=$(date)

用於算術計算,$(())中的shell變數取值將轉換成整數,例如:

$ var=45

$ echo $(($var+3))

$(())中只能用+-*/和()運算子,並且只能做整數運算。

和c語言類似,/在shell中被用作轉義字元,用於去除緊跟其後的單個字元的特殊意義(回車除外),換句話說,緊跟其後的字元取字面值。例如:

$ echo $shell

/bin/bash

$ echo /$shell

$shell

$ echo //

/

比如建立乙個檔名為「$ $」的檔案可以這樣:

$ touch /$/ /$
還有乙個字元雖然不具有特殊含義,但是要用它做檔名也很麻煩,就是-號。如果要建立乙個檔名以-號開頭的檔案,這樣是不行的:

$ touch -hello

touch: invalid option -- h

try `touch --help' for more information.

即使加上/轉義也還是報錯:

$ touch /-hello

touch: invalid option -- h

try `touch --help' for more information.

因為各種unix命令都把-號開頭的命令列引數當作命令的選項,而不會當作檔名。如果非要處理以-號開頭的檔名,可以有兩種辦法:

$ touch ./-hello
或者

$ touch -- -hello
$ ls /

> -l

(ls -l命令的輸出)

和c語言不一樣,shell指令碼中的單引號和雙引號一樣都是字串的界定符(雙引號下一節介紹),而不是字元的界定符。單引號用於保持引號內所有字元的字面值,即使引號內的/和回車也不例外,但是字串中不能出現單引號。如果引號沒有配對就輸入回車,shell會給出續行提示符,要求使用者把引號配上對。例如:

$ echo '$shell'

$shell

$ echo 'abc/(回車)

> de'(再按一次回車結束命令)

abc/

de

$ echo "$shell"

/bin/bash

$ echo "`date`"

sun apr 20 11:22:06 cest 2003

$ echo "i'd say: /"go for it/""

i'd say: "go for it"

$ echo "/"(回車)

>"(再按一次回車結束命令)

"$ echo "//"

/

shell基本的語法

1 基本格式 shell俗稱殼 用來區別於核 是指 為使用者提供操作介面 的軟體 命令解析器 shell是使用者與核心進行互動操作的一種介面,目前最流行的shell稱為 bash shell。shell也是一門程式語言 解釋型的程式語言 即shell指令碼 就是在用linux的shell命令程式設計...

shell基本的語法

1 基本格式 shell俗稱殼 用來區別於核 是指 為使用者提供操作介面 的軟體 命令解析器 shell是使用者與核心進行互動操作的一種介面,目前最流行的shell稱為 bash shell。shell也是一門程式語言 解釋型的程式語言 即shell指令碼 就是在用linux的shell命令程式設計...

shell 基本語法

1,環境變數 環境變數可以從父程序傳給子程序,即shell的環境變數可以傳遞給fork出來的子程序 檢視當前shell的環境變數 command itcast printenv printenv 中的 env 是environment variable 的縮寫2,本地變數 只存在於當前程序 檢視當前...