當前位置:
首頁 > 知識 > 一篇文章學懂Shell腳本,最簡明的教程在這裡

一篇文章學懂Shell腳本,最簡明的教程在這裡



作者:關瑋琳linSir


鏈接:https://www.jianshu.com/p/71cb62f08768




Shell腳本,就是利用Shell的命令解釋的功能,對一個純文本的文件進行解析,然後執行這些功能,也可以說Shell腳本就是一系列命令的集合。


Shell可以直接使用在win/Unix/Linux上面,並且可以調用大量系統內部的功能來解釋執行程序,如果熟練掌握Shell腳本,可以讓我們操作計算機變得更加輕鬆,也會節省很多時間。 


Shell應用場景


Shell能做什麼





  • 將一些複雜的命令簡單化(平時我們提交一次github代碼可能需要很多步驟,但是可以用Shell簡化成一步)



  • 可以寫一些腳本自動實現一個工程中自動更換最新的sdk(庫)



  • 自動打包、編譯、發布等功能



  • 清理磁碟中空文件夾



  • 總之一切有規律的活腳本都可以嘗試一下




Shell不能做什麼




  • 需要精密的運算的時候



  • 需要語言效率很高的時候



  • 需要一些網路操作的時候



  • 總之Shell就是可以快速開發一個腳本簡化開發流程,並不可以用來替代高級語言




Shell的工作原理


Shell可以被稱作是腳本語言,因為它本身是不需要編譯的,而是通過解釋器解釋之後再編譯執行,和傳統語言相比多了解釋的過程所以效率會略差於傳統的直接編譯的語言。



最簡單的腳本:


#!/bin/bash


echo

 

"Hello World"




只需要打開文本編輯工具,編輯成以上的樣子,然後保存成test.sh



運行該腳本:



1. 

cd

 到該目錄下
2. chmod +x ./test.sh  

#給腳本許可權


3. ./test.sh  

#執行腳本






效果圖1


這樣我們便寫出來了第一個最簡單的腳本,下面我們可以嘗試著寫一些複雜的腳本。




Shell中的變數



myText

=

"hello world"


muNum

=

100




這裡面需要注意的就是,「=」前後不能有空格,命名規則就和其它語言一樣了。




訪問變數



myText=

"hello world"


muNum=100
echo $myText
echo muNum



當想要訪問變數的時候,需要使用$,否則輸出的將是純文本內容,如下圖所示。




效果圖2




Shell中的四則運算





















運算符

含義

+

加法運算

-

減法運算

*

乘法運算

/

除法運算




例子程序



#!/bin/bash


echo

 

"Hello World !"


a=3
b=5
val=`expr 

$a

 + 

$b

`

echo

 

"Total value : 

$val

"

val=`expr 

$a

 - 

$b

`

echo

 

"Total value : 

$val

"

val=`expr 

$a

 * 

$b

`

echo

 

"Total value : 

$val

"

val=`expr 

$a

 / 

$b

`

echo

 

"Total value : 

$val

"





這裡面需要注意的就是,定義變數的時候「=」前後是不能有空格的,但是進行四則運算的時候運算符號前後一定要有空格,乘法的時候需要進行轉義。




效果圖3.png




其它運算符 =、==、!=、!、-o、-a































運算符

含義

%

求余

==

相等

=

賦值

!=

不相等

!

-o

-a




例子程序



a=3
b=5
val=`expr 

$a

 / 

$b

`

echo

 

"Total value : 

$val

"

val=`expr 

$a

 % 

$b

`

echo

 

"Total value : 

$val

"

if

 [ 

$a

 == 

$b

 ]

then


   

echo

 

"a is equal to b"


fi


if

 [ 

$a

 != 

$b

 ]

then


   

echo

 

"a is not equal to b"


fi






效果圖4




關係運算符



























運算符

含義

-eq

兩個數相等返回true

-ne

兩個數不相等返回true

-gt

左側數大於右側數返回true

-It

左側數小於右側數返回true

-ge

左側數大於等於右側數返回true

-le

左側數小於等於右側數返回true




例子程序



#!/bin/sh


a=10
b=20

if

 [ 

$a

 -eq 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 -ne 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 -gt 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 -lt 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 -ge 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 -le 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi







效果圖5



字元串運算符





















運算符

含義

=

兩個字元串相等返回true

!=

兩個字元串不相等返回true

-z

字元串長度為0返回true

-n

字元串長度不為0返回true

























運算符

含義

-d file

檢測文件是否是目錄,如果是,則返回 true

-r file

檢測文件是否可讀,如果是,則返回 true

-w file

檢測文件是否可寫,如果是,則返回 true

-x file

檢測文件是否可執行,如果是,則返回 true

-s file 檢測文件是否為空(文件大小是否大於0,不為空返回 true
-e file 檢測文件(包括目錄)是否存在,如果是,則返回 true



字元串



#!/bin/sh


mtext=

"hello"

  

#定義字元串


mtext2=

"world"


mtext3=

$mtext

" "

$mtext2

  

#字元串的拼接


echo

 

$mtext3

  

#輸出字元串


echo

 

${#mtext3}

  

#輸出字元串長度


echo

 

${mtext3:1:4}

  

#截取字元串







效果圖6



數組



#!/bin/sh


array=(1 2 3 4 5)  

#定義數組


array2=(aa bb cc dd ee)  

#定義數組


value=

${array[3]}

  

#找到某一個下標的數,然後賦值


echo

 

$value

  

#列印


value2=

${array2[3]}

  

#找到某一個下標的數,然後賦值


echo

 

$value2

  

#列印


length=

${#array[*]}

  

#獲取數組長度


echo

 

$length





效果圖7

輸出程序




echo



#!/bin/sh


echo

 

"hello world"

  

echo

 hello world  

text=

"hello world"


echo

 

$text


echo

 -e 

"hello 
world"

  

#輸出並且換行


echo

 

"hello world"

 > a.txt  

#重定向到文件


echo

 `date`  

#輸出當前系統時間







效果圖8




printf




同c語言,就不過多介紹了




判斷語句






  • if



  • if-else



  • if-elseIf



  • case



#!/bin/sh


a=10
b=20

if

 [ 

$a

 == 

$b

 ]

then


   

echo

 

"true"


fi

if

 [ 

$a

 == 

$b

 ]

then


   

echo

 

"true"


else


   

echo

 

"false"


fi

if

 [ 

$a

 == 

$b

 ]

then


   

echo

 

"a is equal to b"


elif

 [ 

$a

 -gt 

$b

 ]

then


   

echo

 

"a is greater than b"


elif

 [ 

$a

 -lt 

$b

 ]

then


   

echo

 

"a is less than b"


else


   

echo

 

"None of the condition met"


fi







效果圖9




test命令



test

 $[num1] -eq $[num2]  

#判斷兩個變數是否相等


test

 num1=num2  

#判斷兩個數字是否相等

























參數

含義

-e file

文件存在則返回真

-r file

文件存在並且可讀則返回真

-w file

文件存在並且可寫則返回真

-x file

文件存在並且可執行則返回真

-s file

文件存在並且內容不為空則返回真

-d file

文件目錄存在則返回真




for循環




#!/bin/sh


for

 i 

in

 {1..5}

do


    

echo

 

$i


done

for

 i 

in

 5 6 7 8 9

do


    

echo

 

$i


done

for

 FILE 

in

 

$HOME

/.bash*

do


   

echo

 

$FILE


done






效果圖10



while循環



#!/bin/sh


COUNTER=0

while

 [ 

$COUNTER

 -lt 5 ]

do


    COUNTER=`expr 

$COUNTER

 + 1`
    

echo

 

$COUNTER


done

echo

 

"請輸入。。。"


echo

 

"ctrl + d 即可停止該程序"


while

 

read

 FILM

do


    

echo

 

"Yeah! great film the 

$FILM

"


done




以上是while循環的兩種用法,第一種是比較常規的,執行循環,然後每次都把控制的數加1,就可以讓while循環有退出的條件了。第二種是用戶從鍵盤數據,然後把用戶輸入的文字輸出出來。




跳出循環



break

  

#跳出所有循環


break

 n  

#跳出第n層f循環


continue

  

#跳出當前循環



函數



#!/bin/sh


sysout

(){
    

echo

 

"hello world"


}

sysout



定義一個沒有返回值的函數,然後調用該函數



#!/bin/sh


test

(){

    aNum=3
    anotherNum=5
    

return

 $((

$aNum

+

$anotherNum

))
}

test


result=$?

echo

 

$result




定義一個有返回值的函數,調用該函數,輸出結果






效果圖11



#!/bin/sh


test

(){
    

echo

 

$1

  

#接收第一個參數


    

echo

 

$2

  

#接收第二個參數


    

echo

 

$3

  

#接收第三個參數


    

echo

 

$#

  

#接收到參數的個數


    

echo

 $*  

#接收到的所有參數


}

test

 aa bb cc



定義了一個需要傳遞參數的函數






效果圖12



重定向



$echo result > file  

#將結果寫入文件,結果不會在控制台展示,而是在文件中,覆蓋寫


$echo result 

>> 

file  

#將結果寫入文件,結果不會在控制台展示,而是在文件中,追加寫


echo input < file  

#獲取輸入流




寫一個自動輸入命令的腳本




自動提交github倉庫的腳本



#!/bin/bash


echo

 

"-------Begin-------"


git add .
git commit -m 

$1


echo

 

$1


git push origin master

echo

 

"--------End--------"





效果圖13




編號619,輸入編號直達本文



●輸入m獲取文章目錄

推薦↓↓↓



Web開發


更多推薦

18個技術類微信公眾號


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

請收藏 | Linux運維常見故障及處理的 32 個錦囊妙計
一文詳解 Linux系統常用監控工具

TAG:Linux學習 |