Shell 是一個用 C 語言編寫的程序,用戶能夠經過Shell腳本語言來進行程序開發。與其餘腳本語言不一樣,Shell腳本所需的解釋器通常是內置在操做系統的,而像Node.js、PHP等腳本語言須要手動安裝解釋器程序才能夠。shell
接下來將和你們一塊兒來學習Shell腳本編程。編程
Shell解釋器種類衆多,筆者的電腦上內置如下Shell:vim
/bin/bash /bin/csh /bin/ksh /bin/sh /bin/tcsh /bin/zsh
其中bash和sh是最多見的Shell解釋器,通常狀況下,這兩種Shell沒有區別,本文以bash爲例。segmentfault
打開文本編輯器(vim或者vscode),新建文件 hello.sh,擴展名爲sh(經常使用)。數組
#!/bin/bash echo "Hello World!"
第1行用來指明本腳本須要使用什麼解釋器來執行。#!
是一個約定的語法。bash
echo
用來輸出文本。編程語言
有兩種方法能夠執行Shell腳本:編輯器
做爲可執行程序。給腳本添加可執行權限以後執行便可。學習
chmod +x ./hello.sh # 添加可執行權限 ./hello.sh # 執行腳本
做爲解釋器腳本。直接運行指定的解釋器程序,並將腳本路徑傳入,本方式不要求腳本有可執行權限。spa
/bin/bash hello.sh # 使用/bin/bash來執行hello.sh
和其餘編程語言同樣,Shell腳本也有本身的一套語法規則,咱們如今來系統學習一下。
定義變量時,變量名不加美圓符號$,如:
name="xialei"
和其餘編程語言不一樣的時,Shell腳本中變量名和等號之間不能有空格
。Shell變量名的命名規則以下:
如下是合法的示例
var1 var_2 _var3 MAX_PAGE
如下是不合法的示例
$var
Shell有如下兩種複製方式。
直接賦值。直接在等號後面指定變量值。
name="xialei admin=1
使用命名執行結果。能夠將其餘命令的執行結果賦值給變量。(如下兩種方式是等效的)
file=`ls /etc` # 反引號(鍵盤Tab上面的鍵) file1=$(ls /etc)
已經存在的變量,能夠被從新賦值。
name="hello" echo $name name="world" echo $name
使用變量時在變量名前添加$符號,定義時不加。
name="xialei" echo $name echo ${name}
變量名兩邊的花括號是可選的,通常狀況下不用加,可是若是涉及到邊界識別問題,則須要手動添加花括號。
name="xialei" echo "I'm ${name}studio." # 正確示例 echo "I'm $namestudio." # 錯誤示例
若是不添加花括號,Shell會將namestudio
做爲變量,該變量是不存在的,所以代碼執行邏輯就不是咱們想要的了。
若是某些變量在定義後就沒法更改該變量的值,能夠設置使用readonly
設置爲只讀變量,對只讀變量賦值會跑出錯誤。
name="xialei" readonly name name="zhangsan"
上述例子執行結果以下
./hello.sh: line 5: name: readonly variable
使用unset
能夠釋放變量。變量被釋放後不能使用(使用不會報錯,shell中使用未定義變量當作空值處理),此外unset命令沒法釋放只讀變量。
name="xialei" unset name # 不要$ echo $name
Shell腳本運行時,存在如下三種變量:
Shell支持數字、字符串和數組三種數據類型。下面咱們分別進行學習。
字符串可使用單引號、雙引號,也能夠不使用引號。
單引號
name='xialei'
雙引號
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的運算符和流程控制。
(未完待續)