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 語言,反而會讓我們更快入手。
-
Unix系統
+關注
關注
0文章
15瀏覽量
9679 -
Shell
+關注
關注
1文章
366瀏覽量
23412
發布評論請先 登錄
相關推薦
評論