shell是什么?
shell本身是一個(gè)命令解釋器,介于操作系統(tǒng)的內(nèi)核(kernel)態(tài)和用戶態(tài)之間,可以執(zhí)行系統(tǒng)調(diào)用及系統(tǒng)命令等,讓用戶以此來(lái)與操作系統(tǒng)實(shí)現(xiàn)互動(dòng)。同時(shí),它也用來(lái)指一種計(jì)算機(jī)程序語(yǔ)言(類似于C、Python等)。一個(gè)shell程序一般被稱為一個(gè)腳本。
shell主要流派
目前,shell主要有兩大流派:
- sh
- burne shell (sh)
- burne again shell (bash)
- csh:
- c shell (csh)
- tc shell (tcsh)
- korn shell (ksh)
目前,大部分Linux系統(tǒng)預(yù)設(shè)的shell都是bash。
變量聲明
- 不像C、Java等靜態(tài)語(yǔ)言需要先聲明然后才能使用,與Python等動(dòng)態(tài)語(yǔ)言類似,Bash變量在使用時(shí)直接定義
-
=作為賦值語(yǔ)句時(shí)兩邊不能有空格!,作為字符串比較符號(hào)時(shí)兩邊必須都有空格 - 聲明或重新賦值絕不能使用
$
$VAR="abc"
這種用法是錯(cuò)誤的,因?yàn)?還有個(gè)作用就是執(zhí)行命令
VAR=abc
VAR="abc"
變量引用
- 引用變量必須使用$符號(hào)
- 以下方法等效,不能使用
{$VAR}這種方法,會(huì)有花括號(hào)包裹變量的歧義
echo "THE VAR is" $VAR; # 多個(gè)空格時(shí),認(rèn)為是一個(gè)空格
echo "THE VAR is" ${VAR};
echo "THE VAR is ${VAR}";
單引號(hào)與雙引號(hào)
'':?jiǎn)我?hào)里的任何字符都會(huì)原樣輸出,單引號(hào)中對(duì)變量引用是無(wú)效的,且單引號(hào)中不能出現(xiàn)單引號(hào)(對(duì)單引號(hào)使用轉(zhuǎn)義符也不行);
"":雙引號(hào)里可以引用變量,可以出現(xiàn)轉(zhuǎn)義字符。
流程控制
bash中對(duì)與真假的判斷
返回值是0為真,返回值非0為假
if test abc = abc; then echo $?": true"; else echo $?": false"; fi # 輸出
0: true
if test abc == bc; then echo $?": true"; else echo $?": false"; fi # 輸出
1: false
if test abc === bc; then echo $?": true"; else echo $?": false"; fi # 輸出下面兩行
bash: test: ===: binary operator expected
2: false