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指令碼和程式語言很...