一、shell變量
定義變量語法:
變量名=值 # 等號兩邊不能有空格
示例:
#!/bin/bash
name="Alice"
echo "Hello, $name!" # 使用變量
使用變量-語法:
兩種方式:
第一種:${變量名}
第二種:$變量名
示例:?
代碼示例:1 #! /bin/bash2 3 #定義變量的方式有兩種4 #第一種:${變量名}5 name="Tom"6 echo "你好呀!${name}"7 8 #第二種:$變量名9 echo "你好呀!$name"
?二、shell的數據類型
1.字符串
基本語法:
定義:str=”hello shell”
長度:${#str}
切片:${str:1:4}
代碼示例:
#! /bin/bash
#定義字符串并賦值
str="I LOVE Shell!"
#取值
echo "str:${str}"
#獲取長度
echo "Length the str is ${#str}"
#獲取字符串的切片
echo "str[1:6] is ${str:1:6}"
運行效果:
2. 數組
基本語法:
定義: arr=(vl v2 v3 v4 v5 v6)
通過索引獲取元素: ${arr[0]}
獲取列表所有元素:${arr[*]}
獲取列表的長度:${#arr[*]}
代碼示例:
1 #! /bin/bash
2
3 #定義一個數組
4 zoo=(
5 Dog
6 pig
7 Monkey
8 Panda
9 lion
10 )
11 #輸出所有元素:${變量名[*]}
12 echo "All Animal are ${zoo[*]}"
13 #輸出數組長度(數組中元素的個數):${#變量名[*]}
14 echo "Length the zoo is ${#zoo[*]}"
15 #輸出某個元素:${變量名[n]} n<=數組的長度-1
16 n=3
17 echo "zoo的第${n}個元素是:${zoo[$[n]]}"
18 #組合應用:
19 echo "zoo的最后一個元素是:${zoo[((${#zoo[*]})-1)]}"
?運行結果:
三、shell的邏輯判斷
1.if else
基本語法:
if [ 條件 ]; then命令
elif [ 條件 ]; then命令
else命令
fi
示例:
#!/bin/bash
echo "請輸入一個數字:"
read numif [ $num -gt 10 ]; thenecho "這個數字大于10"
elif [ $num -eq 10 ]; thenecho "這個數字等于10"
elseecho "這個數字小于10"
fi
運行結果:
請輸入一個數字:
8
這個數字小于10
** 補充:文件目錄的判斷 **
1 #! /bin/bash
2
3 path=$1
4
5 #-e 判斷文件是否存在
6 if [ -e $path ]
7 then
8 echo "$path 存在"
9 else
10 echo "$path 不存在"
11 fi12 #-f 判斷是否是文件
13 if [ -f $path ]
14 then
15 echo "$path 是文件"
16 else
17 echo "$path 不是文件"
18 fi 19 #-d 判斷是否是目錄
20 if [ -d $path ]
21 then
22 echo "$path 是目錄"
23 else
24 echo "$path 不是目錄"
25 fi
運行結果:
if else小結
表達式使用: condition 和中括號之間,一定要有空格
2.case
語法:
case $變量名 in
"值 1") 操作;;
esac
四、shell的循環
1. for循環
for val in ${list[*]}:
docommandcommand
done
代碼示例:
1 #! /bin/bash
2
3 list=(
4 service1
5 service2
6 service3
7 service4
8 service5
9 )
10
11 for service in ${list[*]}
12 do
13 echo "檢查服務:${service}"
14 done
運行結果:
2. while循環
語法:
while condition
docommandcommand
done
五、shell函數
1. 語法:
[ function ] funname [()]{action;[return int;]}
說明:
- 1、可以帶?function fun()?定義,也可以直接?fun()?定義,不帶任何參數。
- 2、參數返回,可以顯示加:return?返回,如果不加,將以最后一條命令運行結果,作為返回值。?return?后跟數值?n(0-255).
2. 代碼示例:
#!/bin/bashdemoFun(){echo "這是我的第一個 shell 函數!"
}
echo "-----函數開始執行-----"
demoFun
echo "-----函數執行完畢-----"
輸出結果:
-----函數開始執行-----
這是我的第一個 shell 函數!
-----函數執行完畢-----
下面定義一個帶有?return?語句的函數:
代碼示例:
#!/bin/bashfunWithReturn(){echo "這個函數會對輸入的兩個數字進行相加運算..."echo "輸入第一個數字: "read aNumecho "輸入第二個數字: "read anotherNumecho "兩個數字分別為 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))
}
funWithReturn
echo "輸入的兩個數字之和為 $? !"
輸出結果:
這個函數會對輸入的兩個數字進行相加運算...
輸入第一個數字:?
1
輸入第二個數字:?
2
兩個數字分別為 1 和 2 !
輸入的兩個數字之和為 3 !?
函數返回值在調用該函數后通過?$??來獲得。
注意:所有函數在使用前必須定義。這意味著必須將函數放在腳本開始部分,直至shell解釋器首次發現它時,才可以使用。調用函數僅使用其函數名即可。
注意:?return?語句只能返回一個介于 0 到 255 之間的整數,而兩個輸入數字的和可能超過這個范圍。
要解決這個問題,您可以修改 return 語句,直接使用 echo 輸出和而不是使用 return:
funWithReturn(){echo "這個函數會對輸入的兩個數字進行相加運算..."echo "輸入第一個數字: "read aNumecho "輸入第二個數字: "read anotherNumsum=$(($aNum + $anotherNum))echo "兩個數字分別為 $aNum 和 $anotherNum !"echo $sum # 輸出兩個數字的和
}
六、函數參數
?在函數體內部,通過 $n 的形式來獲取參數的值,例如,$1表示第一個參數,$2表示第二個參數...
?1.?帶參數的函數示例:
#!/bin/bashfunWithParam(){echo "第一個參數為 $1 !"echo "第二個參數為 $2 !"echo "第十個參數為 $10 !"echo "第十個參數為 ${10} !"echo "第十一個參數為 ${11} !"echo "參數總數有 $# 個!"echo "作為一個字符串輸出所有參數 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
輸出結果:
第一個參數為 1 !
第二個參數為 2 !
第十個參數為 10 !
第十個參數為 34 !
第十一個參數為 73 !
參數總數有 11 個!
作為一個字符串輸出所有參數 1 2 3 4 5 6 7 8 9 34 73 !
注意,$10 不能獲取第十個參數,獲取第十個參數需要${10}。當n>=10時,需要使用${n}來獲取參數。
另外,還有幾個特殊字符用來處理參數:
參數處理 | 說明 |
---|---|
$# | 傳遞到腳本或函數的參數個數 |
$* | 以一個單字符串顯示所有向腳本傳遞的參數 |
$$ | 腳本運行的當前進程ID號 |
$! | 后臺運行的最后一個進程的ID號 |
$@ | 與$*相同,但是使用時加引號,并在引號中返回每個參數。 |
$- | 顯示Shell使用的當前選項,與set命令功能相同。 |
$? | 顯示最后命令的退出狀態。0表示沒有錯誤,其他任何值表明有錯誤。 |