1. 程式人生 > 其它 >4.流程控制&read&函式

4.流程控制&read&函式

目錄

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;