Shell爲弱類型語言,在使用變量時不指定類型。
Shell腳本語言不需要編譯就可以直接執行,但腳本文件默認沒有執行權限,需要chmod添加執行權限:
chmod +x test.sh
如果希望這個腳本文件只能由文件所有者執行(所屬用戶組和其他用戶不可執行),那麼可以將上面的命令改爲:
chmod u+x test.sh
腳本文件開頭第一行指定bin文件夾下的bash解釋器,關於腳本第一行的探索可以看這裏:點擊打開鏈接
#!/bin/bash
echo "hello world"
下面列出shell腳本中一些常見的符號:
$ 變量引用符
$# 表示命令行參數個數
$* 表示所有參數
$n 表示第n個參數(參數從1開始計數)
$? 表示最後一個命令執行之後的返回值
| 連接前後兩個命令,將前面的命令返回值傳給後面的命令,支持多命令連接
< 表示重定向輸入
> 表示重定向輸出
" " 表示字符串,雙引號內可以引用變量或命令,要使用元字符需要加轉義符\
` ` 表示命令,單引號在鍵盤esc正下方
‘ ’ 表示字符串,單引號內不可以引用變量或命令,一律視爲普通字符。在單引號內,元義字符可以直接使用,如果要去掉元義需加轉義符\
echo "today is `date`" #date爲系統命令
today is Sun Mar 5 10:18:51 HKT 2017
shell腳本中單行註釋使用#,多行註釋可以使用 :<<字符(開頭) .... 字符(結尾)
#這是單行註釋
-------------------------
:<<!
這是多行註釋
用的字符隨意
但前後要一致
!
-------------------------
shell腳本也有跟C語言類似的語法,例如循環與分支的控制。下面給出一些簡單示例,以便更直觀地瞭解shell腳本語言與C語言的異同。
循環控制:
#while循環(當變量VAR爲1時打印hello world)
while[$VAR=1] #條件用[]括起來
do
echo "hello world" #循環體用do跟done圍起來
done
#for循環(打印從1到10)
for i in $(seq 1 10)
do
echo $i
done
分支控制:
#if-else
if[$VAR=1]
then #在if後要加then
echo "hello"
elif
then #在elif後要加then
echo "world"
else #else後不需要加then
echo "!"
fi #用fi表示if語句結束
#case(類似於switch)
case $VAR in
1)echo "hello";; #每個case單獨分支用雙分號結束
2)echo "world";;
esac #用esac表示case語句結束