如何快速學好Shell腳本?


Shell 語言作為類 Unix 系統的原生腳本,有着非常實用的價值。但對於很多剛剛接觸 Shell 腳本的同學來說,搞懂 Shell 語言的語法卻是一件非常困難的事情。甚至有人吐槽,或許沒有誰能清楚地說明白 Shell 的語法。

例如下面這兩個 Shell 腳本:

#!/bin/bash
a=10
if [ $a = 10 ]
then 
	echo "a is 10"
else
 	echo "a is not 10"
fi
#!/bin/bash
a=10
if [$a = 10 ]  # $a 前沒有加空格,非法
then 
	echo "a is 10"
else
 	echo "a is not 10"
fi

這兩個腳本的區別只是 if 中的判斷表達式,一個有空格,一個沒有空格而已。但在 Shell 語法中,第二個沒有在$a前加空格的腳本是非法的。再舉一個例子:

a=10
a = 10

在我們看來這兩個表達式沒有什么區別嘛,都是給 a 變量賦值 10。但實際上在 Shell 語法中,第一個表達式a=10表示賦值,第二個表達式a = 10表示判斷(判斷 a 是否等於 10)。

又例如 Shell 中我們要進行數學運算,其實有很多種方式可以實現,例如:

#!/bin/bash
a=`expr 10 + 5`
echo $a

當然了,你還可以這么寫:

#!/bin/bash
let a=10+5
echo $a

這兩種方式都可以實現簡單的數學運算。但相比這兩種,我更推薦用下面這種形式:

(( a = 10 + 5 ))
echo $a

即將需要運算的內容放在兩對中括號里面。因為這種方式更加簡潔,並且功能也是最為完整,也是最為接近高級語言的寫法。

正是因為 Shell 中的語法問題以及實現的多樣性,許多初學者(包括我)都會對 Shell 語法感到迷惑。因此我有了寫一個 Shell 快速入門系列的想法。

寫作思路

為了能快速上手 Shell 語法,在很多時候我會對一些不是很重要的內容進行舍棄。這些內容則會作為補充內容在后續的文章中說明。例如在 Shell 中有許多種循環結構:for 循環、while 循環、util 循環,但實際上 while 循環和 until 循環基本上是一樣的。在這種情況下我舍棄對於 until 循環這個語法的介紹。

例如在 Shell 中進行數學運算有很多種方式,可以使用-eq操作符,可以使用==操作符,可以使用=操作符、可以使用(())操作符等等。這個時候我也會進行取舍,取一種最簡單、最通用的語法來實現。舍棄一些復雜的語法並不會影響我們使用 Shell 語言,反而會讓我們更快入手。

這是本系列跟其他 Shell 入門教程的最大不同,即以快速入手為目的,並不追求大而全。對於入門系列的文章,目前寫了大概十四篇。每篇文章閱讀不會超過 10 分鍾,每個知識點都有相應的代碼可以運行,確保小白都能看得懂。

我覺得這種系列學習的文章並不適合放在公眾號里發表,所以公眾號的朋友可以通過我的個人博客:http://shuyi.me 來查看。

知識體系

那如果我想要用到更高級的語法怎么辦?我的思路是直接搜索資料或者到下面的文章中看看。下面的文章是快速入門的延續,但是是較為高級的用法,我會根據我自身情況不斷地增加內容,構建起 Shell 整套體系。希望在不久的將來,這一系列入門教程能夠覆蓋大多數的應用情況。

如果你有想補充的知識點,歡迎關注我的微信公眾號,回復入群與我交流。

如果你想了解高級的用法,可以看下面的這些文章:

更新

  • 2018-07-04 08:23:40 更新。因為每篇的篇幅很短,不適合在博客園發表,所以需要看的可以點擊鏈接到我的博客看。
  • 2018-07-05 20:23:27 更新。這個系列寫完之后發現還是有許多寫得不好的地方,后續會不斷進行再寫。大家有什么問題都可以留言,或者通過我的公眾號加入微信群交流。
  • 2018-07-05 21:43:12 更新:完善了輸出重定向章節。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM