shell解釋:引用別人的話說:「Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。」linux
簡而言之,shell是命令解釋器以外的一種編程語言。shell
shell能夠作什麼:批處理、自動化管理、監控管理、日誌數據處理、自動數據備份等等。編程
1)註釋:#開頭bash
2)命令:shell基本語法編程語言
3)變量:shell支持字符串變量和整數變量。函數
4)結構控制語句:流程控制語句ui
兩種執行方式spa
1)sh shelltest設計
2)./shelltest日誌
說明:兩種執行方式的權限控制不同。
示例:
#!/bin/bash # 我是註釋 :-e特殊字符(\a、\n)轉義 echo -e "Hello World!\a\n" exit 0
定義變量: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到.全部字符(最長匹配)
可使用:man test查看test的語法說明。
如下爲test的幾個基本使用:
-f:文件是否存在 -d:目錄是否存在 -r:文件是否有讀權限 -w:文件是否有寫權限 -x:文件是否有執行權限
示例:
#!/bin/bash filename=/home/zhangsan test -f $filename && echo 'exist' || 'not exist'
經過./shelltest執行,會顯示'not exist'
注意:
1)中括號中必須用空格隔開
2)中括號中的變量最好以雙引號括起來
3)中括號中的常數,最好以單引號括起來
eg:
[ "$a" == "$b" ]&&echo 'yes' || echo 'no'
[ '12' == '10' ]&&echo 'yes' || echo 'no'
三種條件分支:單分支、雙分支、多分支
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
循環語句有三種方式:while do循環、until do循環、for循環
說明:[]中要使用如下轉義符號;(())不須要轉義。shell推薦使用[]。
[] : -eq -ne -gt -ge -lt -le
(()): == != > >= < <=
說明:示例中[ $i -eq 5 ] 等價於 (($i==5))。
#!/bin/bash i=10 while [ $i -eq 5 ];do echo $i; ((i--)); done;
#!/bin/bash i=10 until (($a<0));do echo $i; ((i--)); done;
#!/bin/bash for((i=1;i<=10;i++));do echo $i done;
參考示例,文件名爲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腳本編程了。