shell指令碼基礎教程
一、什麼是shell:
shell解釋:引用別人的話說:“Shell 是一個用 C 語言編寫的程式,它是使用者使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程式設計語言。”
簡而言之,shell是命令直譯器之外的一種程式語言。
shell可以做什麼:批處理、自動化管理、監控管理、日誌資料處理、自動資料備份等等。
二、組成部分和執行方式
1、shell指令碼組成部分
1)註釋:#開頭
2)命令:shell基本語法
3)變數:shell支援字串變數和整數變數。
4)結構控制語句:流程控制語句
2、執行方式
兩種執行方式
1)sh shelltest
2)./shelltest
說明:兩種執行方式的許可權控制不一樣。
三、語法說明
1、註釋、指定執行方式、退出
- 註釋等說明資訊,要以#開頭。
- 指令碼的第一行呼叫時表明基於bash的方式執行:#!/bin/bash(說明:如果系統預設是bash執行,不寫也行)
- 退出時最好寫上:exit 0
示例:
#!/bin/bash # 我是註釋 :-e特殊字元(\a、\n)轉義 echo -e "Hello World!\a\n" exit 0
2、變數和變數的計算
定義變數:name=aa
說明:
- name:變數名,變數名用小寫字母命名
- =:賦值符號,兩邊絕對不能有空格
- aa:可以為字串,可以為數值
引用變數:$name(表示引用name的值)
變數的數值計算:
語法:需要使用雙層小括號括起來,模運算:% 冪運算:**
示例:實現a + b
#!/bin/bash
a=10
b=20
echo $(($a+$b))
echo $((100+20-20*2))
./shelltest執行,結果為:
30
80
字串操作:
${#string} : 計算長度
${string:position} : 從position開始擷取
${string:position:length} : 從position開始擷取length長度
${string#substring} : 刪除開始的字串
示例:
${string#I*.} : 刪除從I到.的所有字元(最短匹配)
${string##I*} : 刪除開始I到.所有字元(最長匹配)
3、語句判斷
1)判斷語句test命令
可以使用:man test檢視test的語法說明。
以下為test的幾個基本使用:
-f:檔案是否存在
-d:目錄是否存在
-r:檔案是否有讀許可權
-w:檔案是否有寫許可權
-x:檔案是否有執行許可權
示例:
#!/bin/bash
filename=/home/zhangsan
test -f $filename && echo 'exist' || 'not exist'
通過./shelltest執行,會顯示'not exist'
2)[]判斷
注意:
1)中括號中必須用空格隔開
2)中括號中的變數最好以雙引號括起來
3)中括號中的常數,最好以單引號括起來
eg:
[ "$a" == "$b" ]&&echo 'yes' || echo 'no'
[ '12' == '10' ]&&echo 'yes' || echo 'no'
4、條件分支
三種條件分支:單分支、雙分支、多分支
1)單分支判斷
語法:
if[];then
echo 'aa'
fi
示例:
#!/bin/bash
filename=/home/asdf
if[ test -f $filename ];then
echo 'aa'
fi
2)雙分支判斷
#!/bin/bash
if[];then
echo 'aa'
else
echo 'bb'
fi
3)多分支判斷
多分支判斷有兩種方式:if elif else方式、case in方式。
第一種:if elif else方式
示例:
#!/bin/bash
if[];then
echo 'aa'
elif
echo 'bb'
elif
echo 'cc'
fi
第二種:case in方式
語法:
case $name in
1);;
echo 'aa'
esac
多分支示例:
從終端接收一個輸入引數,然後進行條件判斷。(read:接收使用者輸入)
#!/bin/bash
echo '輸入一個值:'
read number
if[ $number == 1 ];then
echo '2'
elif[ $number == 2 ];then
echo '2'
else
echo '錯誤'
fi
示例,檢視硬體資訊指令碼:
#!/bin/bash
echo '輸入一個值:'
read hd
if[ $hd == cpu ];then
cat /proc/cpuinfo
elif[ $hd == mem ];then
cat /proc/meminfo
elif[ $hd == hard ];then
df -h
else
echo '錯誤'
fi
case in方式的示例:
#!/bin/bash
echo '輸入一個值:'
read number
case $number in
1)
echo '1';;
2)
echo '2';;
*)
echo '錯誤';;
esac
5、迴圈語句
迴圈語句有三種方式:while do迴圈、until do迴圈、for迴圈
說明:[]中要使用以下轉義符號;(())不需要轉義。shell推薦使用[]。
[] : -eq -ne -gt -ge -lt -le
(()): == != > >= < <=
1)while do迴圈
說明:示例中[ $i -eq 5 ] 等價於 (($i==5))。
#!/bin/bash
i=10
while [ $i -eq 5 ];do
echo $i;
((i--));
done;
2)until do迴圈:直到..才執行
#!/bin/bash
i=10
until (($a<0));do
echo $i;
((i--));
done;
3)for迴圈
#!/bin/bash
for((i=1;i<=10;i++));do
echo $i
done;
6、函式(方法)
參考示例,檔名為shelltest:
#!/bin/bash
function print(){
echo '$1'
}
case $1 in
"one")
print 1;;
"two")
print 2;;
*)
print '錯誤';;
esac
執行的時候可以直接通過控制檯直接傳參:
$ ./shelltest one
以下執行結果為:2
$ ./shelltest two
以上為shell指令碼的基本使用,熟練使用後,再結合linux其他基本命令擴充套件一下,就能基本掌握shell指令碼程式設計了。