當前位置:
首頁 > 知識 > 一篇文章學懂Shell腳本

一篇文章學懂Shell腳本




  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 #執行腳本




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

 Shell中的變數

myText="hello world"
muNum=100


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


  訪問變數

myText="hello world"
muNum=100
echo $myText
echo muNum


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


  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"


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



  其它運算符 =、==、!=、!、-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



  關係運算符


























運算符 含義
-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



  字元串運算符



















運算符 含義
= 兩個字元串相等返回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} #截取字元串



  數組

#!/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



  輸出程序


  

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` #輸出當前系統時間



  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



 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



 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


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


#!/bin/sh

test(){
echo $1 #接收第一個參數
echo $2 #接收第二個參數
echo $3 #接收第三個參數
echo $# #接收到參數的個數
echo $* #接收到的所有參數
}

test aa bb cc


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



 重定向

$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--------"



  以上便是我對shell知識的總結,歡迎大家點心,評論,一起討論~~


via:http://www.jianshu.com/p/71cb62f08768



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

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


請您繼續閱讀更多來自 全棧開發者中心 的精彩文章:

軟體架構設計中要注意的六個方面
泛型的意義和作用是啥?
前端必知的Emmet實用操作
MongoDB常用語句
CSS常見布局解決方案

TAG:全棧開發者中心 |

您可能感興趣

一篇文章學懂Shell腳本,最簡明的教程在這裡
Redis 腳本
Shell 腳本編程陷阱
linux腳本中父shell與子shell 執行的幾種方式
Linux rsync同步文件腳本
PentestPackage-Pentesting腳本集合
如何在 Linux 或者 UNIX 下調試 Bash Shell 腳本
首款基於Pascal腳本語言的全功能Web伺服器Moon Http Server即將上線
Gualtieri甚至還創建了一個概念驗證腳本
如何利用PowerShell診斷腳本執行命令並繞過AppLocker
微軟宣布全新命令行+腳本工具:PowerShell 7統一兼容性
Windows Defender ATP機器學習和AMSI:發掘基於腳本的攻擊
通過shell腳本批量操作mysql資料庫
Linux下高效編寫shell腳本的10個建議
Python腳本將ABAQUS結果導出到excel的方法
微軟太愛 Linux 了,它的 R Open 安裝腳本用 rm 命令刪除了/bin/sh
在 Linux 上用 Bash 腳本監控 messages 日誌
微軟宣布全新命令行+腳本工具:PowerShell 7
PC、移動端VPN搭建Shadowsocks一鍵安裝腳本
如何在Windows下開發Python:在cmd下運行Python腳本