shell指令碼符號篇

2021-08-03 13:15:14 字數 3345 閱讀 4108

hell執行指令碼

#!/bin/bash

echo 「這是乙個shell指令碼」;

shell指令碼中用

#表示注釋,如果

#位於第一⾏開頭

,並且是則例外,

它表⽰該指令碼使⽤後⾯指定的直譯器/bin/sh解釋執⾏。

第一種執行方式:chmod +x script.sh

shell會

fork

乙個子程序並調⽤用

exec

執行./script.sh

這個程式

,exec

系統呼叫應該把子程序的**段替換成

./script.sh

程式的**段

,並從它的

_start

開始執行。然而

script.sh

是個⽂本⽂件

,根本沒有**段和

_start函式,

怎麼辦呢?其實

exec

還有另外一種機制

,如果要執行的是乙個⽂本檔案

,並且第一行用

shebang

指定了直譯器

,則用直譯器程式的**段替換當前程序

,並且從直譯器的

_start

開始執行

,⽽而這個文字檔案被當作命令列引數傳給直譯器。因此

,執行上述指令碼相當於執⾏行程式 。

第二種執行方式:/bin/bash script.sh

shell變數

環境變數:環境變數可以從⽗程序傳給⼦程序,因此

shell

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

shell

程序傳給

fork

出來的子程序。用

printenv

命令可以顯⽰示當前

shell

程序的環境變數。任何程序都由的概念。

本地變數:只存在於當前shell程序,⽤

set命令可以顯⽰當前

shell

程序中定義的所有變數

(包括本地變數和環境變數

)和函式。也叫區域性變數。

*varname=value  注意在定義變數的時候等號倆邊都不能有空格,否則會被

shell

解釋成命令和命令列引數,乙個變數定義後僅存在於當前

shell

程序,它是本地變數,但是

export

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

export varnme=value   

用unset可以刪除已定義的環境變數。

變數的引用:

變數的引用有倆種方式1.echo $shell  echo $shell  2.echo $    echo $abc

*注意在

shell

中變數不需要先定義後使用,如果對乙個沒有定義的變數取值,則值是空字串,並且在定義時不用

$在取變數值時要用

$,shell

不需要明確定義型別,

shell

變數的值都是字串。

檔名帶換

*:匹配

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.doc

和ch02.doc,

則傳給ls

命令的引數實際上是這兩個⽂件名

,⽽不是⼀個匹配字串。

這些用於匹配的字元稱為通用符

命令代換

由反引號括起來的也是⼀條命令,shell先執⾏該命令

,然後將輸出結果⽴刻代換到當前命令⾏中。

$ date=`date`

$ echo $date

例如定義乙個變數存放date命令的輸出:

命令代換也可以⽤$()表⽰

: date=$(date)

算術代換:$(())

⽤於算術計算,$(())中的

shell

變數取值將轉換成整數,例如

: $ var=45

$ echo $(($var+3))

$(())中只能⽤

+-*/和()

運算子,

並且只能做整數運算。

轉義字元\在

shell

中被⽤用作轉義字元 如建立乙個名為「

$ $」的檔案可以寫成

$touch \$\ \$\

還有乙個字元雖然不具有特殊含義,但是要⽤它做⽂件名也很⿇煩,就是

-號。如果要建立⼀個⽂件名以

-號開頭的⽂件

,這樣是不⾏的

: 即使加上

\轉義也還是報錯

: 因為各種

unix

命令都把

-號開頭的命令⾏引數當作命令的選項

,⽽不會當作⽂件名。如果⾮要處理 以

-號開頭的⽂件名

,可以有兩種辦法

:  $touch ./-hello  

或者$ touch -- -hello

單引號:

和c語⾔言不⼀樣

,shell

指令碼中的單引號和雙引號⼀樣都是字串的界定符

(雙引號下⼀節介紹

),⽽不是字元的界定符。單引號⽤於保持引號內所有字元的字⾯值

,即使引號內的

\和回車也不例外

, 但是字串中不能出現單引號。

雙引號:

雙引號⽤於保持引號內所有字元的字⾯值(回車也不例外

),但以下情況除外:

$加變數名可以取變數的值

反引號仍表⽰命令替換

\$表⽰

$的字⾯值

\`表⽰

`的字⾯值

(反引號)

\"表⽰

"的字⾯值

\\表⽰

\的字⾯值 除以上情況之外

,在其它字元前⾯的

\⽆特殊含義

,隻錶⽰字⾯面值

shell指令碼入門 符號篇

shell就是乙個命令列直譯器,它的作用是解釋執行使用者的命令,使用者輸入一條命令,shell就解釋執行一條,這種方式稱為互動式 interactive shell還有一種執行命令的方式稱為批處理 batch 使用者事先寫一 個shell指令碼 script 其中有很多條命令,讓shell一次把這些...

指令碼學習 shell指令碼入門 符號篇

shell變數不需要進行任何宣告,直接定義即可,因為shell變數的值實際上都是字串 對於沒有定義的變數預設是乙個空串 定義的時候shell變數由大寫字母加下劃線組成,並且定義的時候等號兩邊不能存在空格,否則會被認為是命令!shell變數的種類 利用printenv可以顯示當前shell程序的環境變...

Linux 中shell指令碼之符號篇

shell簡介 shell的作用是解釋執行使用者的命令戶,有兩種執行方式 互動式 使用者輸入一條命令,shell就解釋執行一條 批處理 batch 使用者事先寫多個shell指令碼 script 其中有很多條命令,讓shell一次把這些命令執行完,而不必一條一條地敲命令。shell指令碼和程式語言很...