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 分鐘,每個知識點都有相應的**可以執行,確保小白都能看得懂。
那如果我想要用到更高階的語法怎麼辦?我的思路是直接搜尋資料或者到下面的文章中看看。下面的文章是快速入門的延續,但是是較為高階的用法,我會根據我自身情況不斷地增加內容,構建起 shell 整套體系。希望在不久的將來,這一系列入門教程能夠覆蓋大多數的應用情況。
運維人員如何學好shell指令碼程式設計
核心 練 想 再練 再想 運維人員如何學好shell指令碼程式設計 老男孩linux早期畢業的學生談如何學好shell程式設計技巧 該生畢業後一年任職一家近千人公司的運維經理。目前就職小公尺科技 1.基本語法,敲n 1遍。為什麼不是n遍那,因為n遍是你剛開始為了程式設計而努力的幾天,1是說你以後要每...
運維人員如何學好shell指令碼程式設計
核心 練 想 再練 再想 運維人員如何學好shell指令碼程式設計 老男孩linux早期畢業的學生談如何學好shell程式設計技巧 該生畢業後一年任職一家近千人公司的運維經理。目前就職小公尺科技 1.基本語法,敲n 1遍。為什麼不是n遍那,因為n遍是你剛開始為了程式設計而努力的幾天,1是說你以後要每...
運維人員如何學好shell指令碼程式設計
核心 練 想 再練 再想 運維人員如何學好shell指令碼程式設計 老男孩linux早期畢業的學生談如何學好shell程式設計技巧 該生畢業後一年任職一家近千人公司的運維經理。目前就職小公尺科技 1.基本語法,敲n 1遍。為什麼不是n遍那,因為n遍是你剛開始為了程式設計而努力的幾天,1是說你以後要每...