最近在看《鳥哥的LINUX私房菜 基礎(chǔ)學(xué)習(xí)篇》,目前看到了shell腳本這一章,打算在這里簡單記錄一下這一整章的學(xué)習(xí)過程和相關(guān)的知識點卦绣。
參考資料:《鳥哥的LINUX私房菜 基礎(chǔ)學(xué)習(xí)篇》第四版 第十二章
實驗環(huán)境: Ubuntu18.04
在編寫程序時,我們經(jīng)常會用到條件判斷式if,根據(jù)判斷得到的結(jié)果分別執(zhí)行不同的程序段嘴拢。在shell中也經(jīng)常會出現(xiàn)這種情況,所以shell腳本也提供了幾種條件判斷式供我們使用寂纪。
1. if ... then
if ... then是最常見的條件判斷式席吴,同時也類似于其他編程語言,可以利用if進行多層的嵌套捞蛋。
# if ... then 語法
if [ 條件判斷式 ]; then
當條件判斷式成立時孝冒,執(zhí)行命令;
fi #if的結(jié)束標志
#分支判斷: if...else...
if [ 條件判斷式 ]; then
當條件判斷式成立時拟杉,執(zhí)行命令迈倍;
else
當條件判斷式不成立時,執(zhí)行命令捣域;
fi
# 多層判斷:if ... elif ... else ...
if [ 條件判斷式一 ]; then
當條件判斷式一成立時啼染,執(zhí)行命令;
elif [ 條件判斷式二]
當條件判斷式二成立時焕梅,執(zhí)行命令迹鹅;
else
當條件判斷式一和二不成立時,執(zhí)行命令贞言;
fi
注意:判斷符[ ]使用時斜棚,兩端各需要一個空格,詳情可參考 二.善用判斷式
- 簡單的示例
#文件名:hello-2.sh
#!/bin/bash
# Program:
# Check $1 is equal to "hello"
# History:
# 2019/2/23 LaiFeng
if [ "${1}" == "hello" ]; then
echo "Hello, how are you?"
elif [ "${1}" == "" ]; then
echo "You must input parameter."
else
echo "The only parameter is "hell", ex->{${0} hello}"
fi
2. case ... esac
case ... esac語法的功能類似于其他編程語言中的switch ... case,也可以用于條件判斷弟蚀。
# case ... esac 語法
case $變量名稱 in
"第一個變量內(nèi)容")
程序段
;;
"第二個變量內(nèi)容")
程序段
;;
*) #用*代表所有其他值
exit 1 #exit 1返回1蚤霞,即$?=1
;;
esac #case倒著寫
- 簡單的示例
#文件名:hello-3.sh
#!/bin/bash
# Program:
# Show "hello" from $1...by using case..esac
# History:
# 2019/2/25 LaiFeng
case ${1} in
"hello")
echo "Hello, how are you?"
;;
"")
echo "You MUST input parameters, ex->{$0 someword}."
;;
*)
echo "Usage {$0 hello}"
;;
esac
3.函數(shù) function
shell腳本也提供了自定義函數(shù)的功能,但函數(shù)的用法有所不同义钉。
注意:shell腳本中函數(shù)的定義一定要在程序的最前面(因為腳本是從上到下昧绣、由左向右執(zhí)行的)
- 簡單的示例
#文件名:show123_2.sh
#!/bin/bash
# Program:
# Use function to repeat information.
# History
# 2019/2/25 LaiFeng
function printit(){
echo -n "Your choice is " #-n 不換行
}
echo "This program will print you selection!"
case $1 in
"one")
printit;echo $1 | tr 'a-z' 'A-Z' #tr 'a-z' 'A-Z 將字母小寫轉(zhuǎn)成大寫
;;
"two")
printit;echo $1 | tr 'a-z' 'A-Z'
;;
"three")
printit;echo $1 | tr 'a-z' 'A-Z'
;;
esac
function不能在括號內(nèi)直接傳入?yún)?shù),而是使用了內(nèi)置變量來替代參數(shù)的作用捶闸,它的使用與shell腳本類似夜畴。$0代表函數(shù)名稱 $1、$2...代表傳入的參數(shù)
删壮。
- 簡單的示例
#文件名:show123_3.sh
#!/bin/bash
# Program:
# Use function to repeat information.
# History
# 2019/2/25 LaiFeng
function printit(){
echo "Your choice is $1"
}
echo "This program will print you selection!"
case $1 in
"one")
printit 1 #1為傳入的參數(shù)的值
;;
"two")
printit 2 #2為傳入的參數(shù)的值
;;
"three")
printit 3 #3為傳入的參數(shù)的值
;;
*)
echo "Usage $0 {one|two|three}"
esac
想要了解更多關(guān)于shell腳本的內(nèi)容贪绘?==>Linux shell腳本 :)