shell腳本基礎教程

1、什麼是shell:

shell解釋:引用別人的話說:「Shell 是一個用 C 語言編寫的程,它是用戶使用 Linux 的橋樑。Shell 既是一種命令語言,又是一種程序設計語言。」linux

  簡而言之,shell是命令解釋器以外的一種編程語言。shell

shell能夠作什麼:批處理、自動化管理、監控管理、日誌數據處理、自動數據備份等等。編程

2、組成部分和執行方式

一、shell腳本組成部分

    1)註釋:#開頭bash

    2)命令:shell基本語法編程語言

    3)變量:shell支持字符串變量和整數變量。函數

    4)結構控制語句:流程控制語句ui

二、執行方式

兩種執行方式spa

    1)sh shelltest設計

    2)./shelltest日誌

說明:兩種執行方式的權限控制不同。

3、語法說明

一、註釋、指定執行方式、退出

  • 註釋等說明信息,要以#開頭。
  • 腳本的第一行調用時代表基於bash的方式執行:#!/bin/bash(說明:若是系統默認是bash執行,不寫也行)
  • 退出時最好寫上:exit 0

示例:

#!/bin/bash
# 我是註釋 :-e特殊字符(\a、\n)轉義
echo -e "Hello World!\a\n" 
exit 0

二、變量和變量的計算

定義變量: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到.全部字符(最長匹配)

三、語句判斷

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'

四、條件分支

三種條件分支:單分支、雙分支、多分支

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

(()): == != > >= < <=

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;

六、函數(方法)

參考示例,文件名爲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腳本編程了。

相關文章
相關標籤/搜索