4.流程控制&read&函式
阿新 • • 發佈:2022-03-27
目錄
if
語法
方式一
if [ 條件判斷式 ];then
滿足條件做的事情
fi
方式二
if [ 條件判斷式 ]
then
滿足條件做的事情
fi
注意事項:
- [ 條件判斷式 ],中括號和條件判斷式之間必須有空格
- if後要有空格
Demo
#!/bin/bash #輸入一個值(read為控制檯輸入命令,執行指令碼後會等待輸入) read index #判斷 if [ $index = 'a' ];then echo "輸入的為A:"$index elif [ $index = 'b' ] then echo "輸入的為B:"$index fi
case
語法
case $變數名 in
"值1")
如果變數的值等於值1,則執行程式1
;;
"值2")
如果變數的值等於值2,則執行程式2
;;
*)
如果變數的值都不是以上的值,則執行此程式
;;
esac
注意事項:
- case行尾必須為單詞“in”,每一個模式匹配必須以右括號“)”結束。
- 雙分號“;;”表示命令序列結束,相當於java中的break。
- 最後的“*)”表示預設模式,相當於java中的default。
Demo
#!/bin/bash read index case $index in "a") echo "輸入的為A:"$index ;; "b") echo "輸入的為B:"$index ;; *) echo "都沒匹配上,輸入的是"$index ;; esac
for
語法
方式一
for (( 初始值;迴圈控制條件;變數變化 ))
do
程式
done
方式二
for 變數 in 值1 值2 值3…
do
程式
done
Demo
#方式一 #!/bin/bash count=0; for((i=0;i<10;i++)) do count=$[$count+1] echo "本次迴圈值:"$count done echo $count #*************************** #方式二(01) 依次列印 a b c #!/bin/bash for i in a b c do echo $i done #方式二(02) 依次列印 a b c #!/bin/bash arr="a b c" for i in $arr do echo $i done
$*與$@區別
# $* 和 $@ 不加引號時,兩者一樣
# $* 和 $@ 加引號時,"$*"會把所有引數當作一個字串輸出,"$@"仍會拆分成陣列後迴圈
for i in "$*"
do
echo $i
done
echo "============="
for i in "$@"
do
echo $i
done
while
語法
while [ 條件判斷式 ]
do
程式
done
Demo
i=0
while [ $i -lt 10 ]
do
echo "迴圈第"$i"次"
i=$[$i + 1]
done
echo "跳出while,值為:"$i
read
語法
read(選項)(引數)
選項:
- p:指定讀取值時的提示符;
- t:指定讀取值時等待的時間(秒)。
引數
變數:指定讀取值的變數名
Demo
#2秒鐘未輸入自動結束
#!/bin/bash
read -p "請輸入" -t 2 inputval
echo "--"$inputval"--"
if [ $inputval ]
then
echo "輸入值為:"$inputval
fi
if [ ! $inputval ];then
echo "超時未輸入"
fi
函式
basename
語法
basename [string / pathname] [suffix]
#basename命令會刪掉所有的字首包括最後一個(‘/’)字元,然後將字串顯示出來
#suffix為字尾,如果suffix被指定了,basename會將pathname或string中的suffix去掉。
Demo
basename /application/shell/parameter.sh
#會輸出 parameter.sh
basename /application/shell/parameter.sh .sh
#會輸出 parameter
dirname
語法
dirname 檔案絕對路徑
#從給定的包含絕對路徑的檔名中去除檔名(非目錄的部分),然後返回剩下的路徑(目錄的部分)
Demo
dirname /application/shell/parameter.sh
#會輸出 /application/shell
自定義函式
語法
[ function ] funname[()]
{
Action;
[return int;]
}
- 必須在呼叫函式地方之前,先宣告函式,shell指令碼是逐行執行。不會像其它語言一樣先編譯。
- 函式返回值,只能通過$?系統變數獲得,可以顯示加return返回,如果不加,將以最後一條命令執行結果,作為返回值。return後跟數值n(0-255)
Demo
#!/bin/bash
function sum()
{
val=$[ $1 + $2 ]
echo "輸入兩數字之和為:"$val
}
read -p "輸入第一個數字: " n1;
read -p "輸入第二個數字: " n2;
sum $n1 $n2;