天天看點

Shell 極簡教程Hello World變量函數運算符字元串數組for 循環if elseShell test 指令

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"