shell基本語法(二)

2021-08-09 12:25:42 字數 4018 閱讀 3775

按照慣例,

shell

變數通常由字母加下劃線開頭,由任意長度的字母、數字、下劃線組成。有兩種型別的

shell

變數:

1.環境變數

環境變數可以從父程序傳給子程序,因此

shell

程序的環境變數可以從當前

shell

程序傳給

fork

出來的子程序。用

printenv

命令可以顯示當前

shell

程序的環境變數。 2.

本地變數

只存在於當前

shell

程序,用

set命令可以顯示當前

shell

程序中定義的所有變數(包括本地變數和環境變數)和函式。

環境變數是任何程序都有的概念,而本地變數是

shell

特有的概念。在

shell

中,環境變數和本地變數的定義和用法相似。在

shell

中定義或賦值乙個變數:

itcast$ varname=value

注意,等號兩邊都不能有空格,否則會被

shell

解釋成命令和命令列引數。

乙個變數定義後僅存在於當前

shell

程序,它是

本地變數

,用export

命令可以把本地變數匯出為環境變數,定義和匯出環境變數通常可以一步完成:

itcast$ exportvarname=value

也可以分兩步完成:

itcast$ varname=value

itcast$ export varname

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

itcast$ unset varname

如果乙個變數叫做

varname

,用' varname'

可以表示它的值,在不引起歧義的情況下也可以用

varname

表示它的值。通過以下例子比較這兩種表示法的不同:

itcast$ echo $shell

注意,在定義變數時不用「

'」取變數值時要用。和

c語言不同的是,

shell

變數不需要明確定義型別,事實上

shell

變數的值都是字串,比如我們定義

var=45

,其實var

的值是字串

45而非整數。

shell

變數不需要先定義後使用,如果對乙個沒有定義的變數取值,則值為空字串。

這些用於匹配的字元稱為萬用字元(

wildcard

),如:

* ? [ ]

具體如下:

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

?匹配乙個任意字元

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

itcast$ ls /dev/ttys*

itcast$ ls ch0?.doc

itcast$ ls ch0[0-2].doc

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

注意,globbing

所匹配的檔名是由

shell

展開的,也就是說在引數還沒傳給程式之前已經展開了,比如上述

ls ch0[012].doc

命令,如果當前目錄下有

ch00.doc

和ch02.doc

,則傳給

ls命令的引數實際上是這兩個檔名,而不是乙個匹配字串。由「`

」反引號括起來的也是一條命令,

shell

先執行該命令,然後將輸出結果立刻代換到當前命令列中。例如定義乙個變數存放

date

命令的輸出:

itcast$ date=`date`

itcast$ echo $date

命令代換也可以用

$()表示:

itcast$ date=$(date)

使用$(())

,用於算術計算,

(())

中的shell

變數取值將轉換成整數,同樣含義的

$[ ]

等價例如:

itcast$ var=45

itcast$ echo $(($var+3))

等價於echo $[var+3]或$[$var+3]

$(())

中只能用

+-*/和()

運算子,並且只能做整數運算。

$[base#n]

,其中base

表示進製,n按照

base

進製解釋,後面再有運算數,按十進位制解釋。

echo $[2#10+11]

echo $[8#10+11]

echo $[16#10+11]和c

語言類似,\在

shell

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

itcast$ echo $shell

/bin/bash

itcast$ echo \$shell

$shell

itcast$ echo \\ \

比如建立乙個檔名為「

$ $」的檔案(

$間含有空格)可以這樣:

itcast$ touch \$\ \$

還有乙個字元雖然不具有特殊含義,但是要用它做檔名也很麻煩,就是

-號。如果要建立乙個檔名以

-號開頭的檔案,這樣是不正確的:

itcast$ touch -hello

touch: invalid option --h

try `touch --help' formore information.

即使加上

\轉義也還是報錯:

itcast$ touch \-hello

touch: invalid option --h

try `touch --help' formore information.

因為各種

unix

命令都把

-號開頭的命令列引數當作命令的選項,而不會當作檔名。如果非要處理以

-號開頭的檔名,可以有兩種辦法:

itcast$ touch ./-hello 或者

itcast$ touch -- -hello \

還有一種用法,在

\後敲回車表示續行,

shell

並不會立刻執行命令,而是把游標移到下一行,給出乙個續行提示符

>

,等待使用者繼續輸入,最後把所有的續行接到一起當作乙個命令執行。例如:

itcast$ ls \

> -l

(ls-l命令的輸出)和c

語言同,

shell

指令碼中的單引號和雙引號一樣都是字串的界定符(雙引號下一節介紹),而不是字元的界定符。單引號用於保持引號內所有字元的字面值,即使引號內的

\和回車也不例外,但是字串中不能出現單引號。如果引號沒有配對就輸入回車,

shell

會給出續行提示符,要求使用者把引號配上對。例如:

itcast$ echo '$shell'

$shell

itcast$ echo 'abc\(回車)

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

abc\ de

被雙引號用括住的內容,將被視為單一字串。它防止萬用字元擴充套件,但允許變數擴充套件。這點與單引號的處理方式不同

itcast$ date=$(date)

itcast$ echo"$date"

itcast$ echo '$date'

再比如:

itcast$ var=200

itcast$ echo $var

200itcast$ echo '$var'

$var

itcast$ echo"$var"

200

shell 基本語法

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

Shell基本語法

二 引數傳遞 三 運算 四 邏輯運算子 五 條件分支 六 迴圈控制 七 函式 八 shell 輸入 輸出重定向 九 shell 檔案包含 1.變數命名之間不能有空格 2.使用變數需要使用 符號,最好使用 來規定變數的邊界,可以在字串中直接使用變數 3.唯讀變數用 readonly 修飾 4.刪除變數...

shell 基本語法

將os命令堆積到可執行的檔案裡,由上至下的順序執行文字裡的os命令 就是指令碼了.再加上些智慧型 條件 流控 控制,就變成了智慧型化指令碼了.part1 為何要有變數 程式的執行就是一些列狀態的變數 用變數值的變化去表示 part2 變數命名規則 以字母或下劃線開頭,剩下的部分可以是 字母 數字 下...