前言:從書中記錄下來僵闯。
腳本
不需要編譯的程序文件卧抗,而是被“解釋”執(zhí)行,腳本運(yùn)行時需要一個“解釋器”鳖粟,解釋器能夠讀懂預(yù)先定義好的腳本語法社裆,并執(zhí)行;
所有的腳本有兩個共同的特點:
- 腳本內(nèi)容是字面上可以讀懂的文本文件向图;
- 不同的腳本必須由不同的解釋器解釋執(zhí)行泳秀,而腳本的語法則由解釋器的設(shè)計者來定義;
Bash腳本
#!/bin/bash
echo "hello bash" #這是注釋
#!/bin/bash
:首行榄攀,并且必需的嗜傅,從而操作系統(tǒng)讓該文件選擇Bash來解釋執(zhí)行腳本文件;(Perl腳本:#!/bin/perl)
echo
:Linux命令檩赢;
獲取輸入
- 執(zhí)行腳本時用戶輸入吕嘀;
- 將前一個腳本的輸出作為該腳本的輸入;
- 腳本函數(shù)的參數(shù)贞瞒;
用戶的輸入可以用$n
表示偶房,n為1~9自然數(shù),分別代表輸入?yún)?shù)中的第n個參數(shù)军浆;
#!/bin/bash
echo $1
echo $2
echo $3
執(zhí)行該腳本棕洋,輸出為:
./hello.sh i love you too
i
love
you
變量
- 在Bash腳本中的變量沒有類型,所有的變量都是字符串乒融;
- 變量不要單獨(dú)定義拍冠,直接賦值,賦值語句中不能有空格簇抵;
- 引用變量時只需在變量前加$符號;
- 為了避免引用混淆射众,常使用雙引號包含要引用的變量碟摆;
#!/bin/bash
A=b
All=all
echo "$A"ll
echo $All
執(zhí)行打印:
bll
all
條件判斷
主要用于判斷兩個字符串是否相等叨橱、兩個數(shù)字是否相等典蜕;
#!/bin/bash
if [ "$1" = "normal" ]; then
echo "this is normal case"
elif [[ -z "$1" ]]; then
echo "no input, ignal..."
fi
# 該代碼判斷用戶輸入的第一個參數(shù)断盛,值為“normal”字符串,顯示“this is normal case”愉舔,如果第一個參數(shù)為空钢猛,則顯示“no input, ignal...”;
- if轩缤、elif后面一定要跟上then命迈;
- 如果if 和 then寫在同一行, 那么then的前面要跟上
;
號;否則then 換行寫火的; - 多個判斷分支可以使用elif語句壶愤;
- 條件語句必須使用fi結(jié)束;
- 條件語句中“[”符號后面必須要有一個空格馏鹤;原因是在Bash腳本中“[”符號是一個可執(zhí)行文件(命令)征椒,該命令是一個條件判斷命令;
Bash腳本的比較語句中嚴(yán)格區(qū)分操作數(shù)湃累,字符串的比較和整數(shù)的比較使用不同的操作符勃救;
操作符 | 返回true的條件 | 操作數(shù)個數(shù) |
---|---|---|
-n | 操作數(shù)的長度不為0 | 1 |
-z | 操作數(shù)的長度為0 | 1 |
-d | 操作數(shù)對應(yīng)一個目錄 | 1 |
-f | 操作數(shù)對應(yīng)一個文件 | 1 |
-eq | 操作數(shù)為整數(shù),并且相等 | 2 |
-neq | 操作數(shù)為整數(shù)治力,但不相等蒙秒,與 -eq 相反 | 2 |
= | 操作數(shù)為字符串,并且相等 | 2 |
!= | 操作數(shù)為字符串琴许,不相等税肪,與 = 相反 | 2 |
-lt | 小于(less than),操作數(shù)為整數(shù) | 2 |
-gt | 大于(great than)榜田,操作數(shù)為整數(shù) | 2 |
-ge | 大于等于(great equal)益兄,操作數(shù)為整數(shù) | 2 |
-le | 小于等于(less equal),操作數(shù)為整數(shù) | 2 |
while []...do... done
#!/bin/bash
echo "please use add or delete or exit"
ACTION="default"
while [[ -n $ACTION ]]; do
read ACTION #read:Linux命令箭券,提示用戶輸入并以按回車鍵(LF)結(jié)束輸入净捅,輸入的內(nèi)容保存到變量ACTION中
case $ACTION in #in:Linux命令,每一個case分支用一個具體的值表示辩块,并帶一個小括弧
add )
echo "add somebody"
;; #每個分支的結(jié)束符號是兩個分號
delete )
echo "delete somebody"
;;
exit )
echo "complete"
break #break:退出整個while循環(huán)
;;
* ) #*:通配符
echo "invalide action, please re-enter"
;;
esac #esac:Linux命令蛔六,可以理解為case語句的結(jié)束標(biāo)識
done #done語句是整個while語句的結(jié)束標(biāo)識
#腳本的作用是根據(jù)用戶輸入的參數(shù),執(zhí)行不同的內(nèi)容
for循環(huán)
for X in 1 2 3 4 5 hello #for一般和in聯(lián)合使用废亭,用于從某個集合中逐個取出元素并對其進(jìn)行操作
do
echo $X
done #for語句的結(jié)束標(biāo)識
#該段代碼顯示in集合中的所有元素国章,in語句后面緊跟目標(biāo)集合,X是一個變量名稱