Hello World
vim hello_world.sh
#!/bin/bash
echo "Hello World !"
chmod +x *.sh
./hello_world.sh
Hello,World!
變量
#!/bin/bash
echo "Hello,World!"
a=1
b=`expr $a + 1`
echo $b
注意,變量名和等号之間不能有空格,這可能和你熟悉的所有程式設計語言都不一樣。同時,變量名的命名須遵循如下規則:
首個字元必須為字母(a-z,A-Z)。
中間不能有空格,可以使用下劃線(_)。
不能使用标點符号。
不能使用bash裡的關鍵字(可用help指令檢視保留關鍵字)。
除了顯式地直接指派,還可以用語句給變量指派
函數
Jietu20171118-235519.jpg
其中, $1 表示調用該函數傳入的第1個參數。
17 say_nowtime(){
18 now_time=`date`
19 echo "$1 Say now time is: $now_time "
20 }
21
22 say_nowtime "Jack"
說明:
1、可以帶function fun() 定義,也可以直接fun() 定義,不帶任何參數。
2、參數傳回,可以顯示加:return 傳回,如果不加,将以最後一條指令運作結果,作為傳回值。
運算符
Shell 和其他程式設計語言一樣,支援多種運算符,包括:
算數運算符
關系運算符
布爾運算符
字元串運算符
檔案測試運算符
原生bash不支援簡單的數學運算,但是可以通過其他指令來實作,例如 awk 和 expr,expr 最常用。
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數相加(注意使用的是反引号 ` 而不是單引号 '):
#!/bin/bash
echo "Hello,World!"
a=1
b=`expr $a + 1`
echo $b
需要注意的是,$a + 1 之間必須要有空格,這跟大部分的程式設計語言不同。
字元串
數組
image.png
需要注意的是,數組之間的元素時用空格隔開的,不是用的逗号。
通路數組元素的文法是: ${array[i]}
另外,通過
${array[*]}
${array[@]}
可以通路數組所有元素。
擷取數組的長度 ${#array[*]} :
有幾個特殊字元用來處理參數:
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本的參數個數 |
$* | 以一個單字元串顯示所有向腳本傳遞的參數 |
$$ | 腳本運作的目前程序ID号 |
$! | 背景運作的最後一個程序的ID号 |
$@ | 與$*相同,但是使用時加引号,并在引号中傳回每個參數。 |
$- | 顯示Shell使用的目前選項,與set指令功能相同。 |
$? | 顯示最後指令的退出狀态。0表示沒有錯誤,其他任何值表明有錯誤。 |
for 循環
與其他程式設計語言類似,Shell支援for循環。
for循環一般格式為:
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
寫成一行:
for var in item1 item2 ... itemN; do command1; command2… done;
當變量值在清單裡,for循環即執行一次所有指令,使用變量名擷取清單中的目前取值。指令可為任何有效的shell指令和語句。in清單可以包含替換、字元串和檔案名。
in清單是可選的,如果不用它,for循環使用指令行的位置參數。
例如,順序輸出目前清單中的數字:
for loop in 1 2 3 4 5
do
echo "The value is: $loop"
done
if else
if 語句文法格式:
if condition
then
command1
command2
...
commandN
fi
寫成一行(适用于終端指令提示符):
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
Shell test 指令
Shell中的 test 指令用于檢查某個條件是否成立,它可以進行數值、字元和檔案三個方面的測試。
詳見:
http://www.runoob.com/linux/linux-shell-test.html源代碼:
$ cat hello_world.sh
#!/bin/bash
echo "Hello,World!"
a=1
b=`expr $a + 1`
echo $b
array=(1 2 3 4 5 "x" "y" "z")
echo ${array[*]}
echo ${array[@]}
echo "array[1] = ${array[1]}"
echo "array length = ${#array[*]}"
say_nowtime(){
now_time=`date`
echo "$1 Say now time is: $now_time "
}
say_nowtime "Jack"