天天看點

perl裡嵌套shell指令轉義符_Shell腳本快速入門(1)

Shell 是一個用 C 語言編寫的程式,使用者可以通過Shell腳本語言來進行程式開發。與其他腳本語言不同,Shell腳本所需的解釋器一般是内置在作業系統的,而像Node.js、PHP等腳本語言需要手動安裝解釋器程式才可以。

接下來将和大家一起來學習Shell腳本程式設計。

Shell解釋器

Shell解釋器種類衆多,筆者的電腦上内置以下Shell:

/bin/bash/bin/csh/bin/ksh/bin/sh/bin/tcsh/bin/zsh
           

其中bash和sh是最常見的Shell解釋器,一般情況下,這兩種Shell沒有差別,本文以bash為例。

Hello World

打開文本編輯器(vim或者vscode),建立檔案 hello.sh,擴充名為sh(常用)。

#!/bin/bashecho "Hello World!"
           

第1行用來指明本腳本需要使用什麼解釋器來執行。

#!

是一個約定的文法。

echo

用來輸出文本。

執行Shell腳本

有兩種方法可以執行Shell腳本:

1.作為可執行程式。給腳本添加可執行權限之後執行即可。

chmod +x ./hello.sh # 添加可執行權限./hello.sh # 執行腳本
           

2.作為解釋器腳本。直接運作指定的解釋器程式,并将腳本路徑傳入,本方式不要求腳本有可執行權限。

/bin/bash hello.sh # 使用/bin/bash來執行hello.sh
           

Shell文法

和其他程式設計語言一樣,Shell腳本也有自己的一套文法規則,我們現在來系統學習一下。

變量

命名規則

定義變量時,變量名不加美元符号$,如:

name="xialei"
           

和其他程式設計語言不同的是,Shell腳本中

變量名和等号之間不能有空格

。Shell變量名的命名規則如下:

•隻能包含英文字母、數字和下劃線,且不能以數字開頭•不能包含空格•不能使用關鍵字命名(通過下劃線連接配接關鍵字是允許的)•不能使用标點符号

以下是合法的示例

var1var_2_var3MAX_PAGE
           

以下是不合法的示例

$var
           

指派

Shell有以下兩種複制方式。

1.直接指派。直接在等号後面指定變量值。

name="xialeiadmin=1
           

2.使用指令執行結果。可以将其他指令的執行結果指派給變量。(以下兩種方式是等效的)

file=`ls /etc` # 反引号(鍵盤Tab上面的鍵)file1=$(ls /etc)
           

已經存在的變量,可以被重新指派。

name="hello"echo $namename="world"echo $name
           

使用變量

使用變量時在變量名前添加$符号,定義時不加。
name="xialei"echo $nameecho ${name}
           

變量名兩邊的花括号是可選的,一般情況下不用加,但是如果涉及到邊界識别問題,則需要手動添加花括号。

name="xialei"echo "I'm ${name}studio." # 正确示例echo "I'm $namestudio." # 錯誤示例
           

如果不添加花括号,Shell會将

namestudio

作為變量,該變量是不存在的,是以代碼執行邏輯就不是我們想要的了。

隻讀變量

如果某些變量在定義後就無法更改該變量的值,可以設定使用

readonly

設定為隻讀變量,對隻讀變量指派會跑出錯誤。

name="xialei"readonly namename="zhangsan"
           

上述例子執行結果如下

./hello.sh: line 5: name: readonly variable
           

釋放變量

使用

unset

可以釋放變量。變量被釋放後不能使用(使用不會報錯,shell中使用未定義變量當做空值處理),此外unset指令無法釋放隻讀變量。

name="xialei"unset name # 不要$echo $name
           

變量類型

Shell腳本運作時,存在以下三種變量:

•局部變量。在腳本中定義的變量,隻對目前腳本有效•環境變量。所有程式都能通路到環境變量,此外Shell腳本也可以在運作時定義環境變量•Shell變量。Shell變量是由Shell解釋器設定的變量。Shell變量中有一部分是局部變量,有一部分是環境變量。

資料類型

Shell支援數字、字元串和數組三種資料類型。下面我們分别進行學習。

字元串

字元串可以使用單引号、雙引号,也可以不使用引号。

單引号

name='xialei'
           

•單引号内的任何字元都會原樣使用,不解析變量,也不解析轉義字元。這一點和PHP有點類似

雙引号

name='xialei'msg="Hello, ${name}"echo $msg
           

•雙引号内的字元串會進行變量解析和轉義字元解析

字元串拼接

字元串拼接有以下兩種方式。

引号拼接(支援雙引号和單引号)

name='xialei'msg='Hello '$name', welcome!'echo $msg
           

内部嵌套(隻支援雙引号,因為單引号不解析變量)

name='xialei'msg="Hello ${name}, welcome!"echo $msg
           

數組

Shell隻支援一維數組,不限定數組大小。

數組的索引由0開始,讀取元素的索引可以使用整數或表達式。

數組定義

數組元素使用

小括号

括起來,每個元素之間用

空格

分割。

users=(xialei zhangsan lisi)
           

讀取數組元素

文法如下:

${數組名稱[下标]}
           

比如上例中讀取第2個人

users=(xialei zhangsan lisi)echo ${users[1]} # 輸出zhangsan
           

使用

@

作為下标可以擷取數組的所有元素。

users=(xialei zhangsan lisi)echo ${users[@]} # 輸出 xialei zhangsan lisi
           

擷取數組長度

文法如下

length=${#數組名[@]}
           

比如輸出users數組的長度

users=(xialei zhangsan lisi)echo ${#users[@]}
           

今天的内容主要是讓大家對Shell有一個宏觀的認識,介紹了Shell的變量以及資料類型,下一篇将重點介紹Shell的運算符和流程控制。

perl裡嵌套shell指令轉義符_Shell腳本快速入門(1)

0.jpeg

(未完待續)

繼續閱讀