揭秘 Bash 腳本中如何檢查參數(shù)的數(shù)量
檢查腳本中傳遞的參數(shù)總數(shù)是非常重要的,它可以用于各種目的,如錯(cuò)誤處理、根據(jù)參數(shù)數(shù)量提供消息以及幫助用戶傳遞正確數(shù)量的參數(shù)。在Bash中,可以通過(guò)兩種方法來(lái)計(jì)算參數(shù)的總數(shù)。一種是使用”$#”,另一種是使用循環(huán)。本教程將展示檢查參數(shù)數(shù)量的方法,并展示如何將該值用于不同的目的。
本教程的這一部分將使用多個(gè)示例展示檢查參數(shù)數(shù)量的用途。
示例1:使用”$#”計(jì)算參數(shù)的總數(shù)
創(chuàng)建一個(gè)包含以下腳本的Bash文件,它將計(jì)算參數(shù)的總數(shù),并使用”for”循環(huán)打印參數(shù)值。
#!/bin/bash
# Linux迷 www.linuxmi.com
#存儲(chǔ)參數(shù)的數(shù)量
len=$#
echo "參數(shù)總數(shù): $len"
echo "參數(shù)值為:"
#打印參數(shù)值
for val in $@
do
echo $val
done
在使用參數(shù)值66、93139和123執(zhí)行腳本后,將出現(xiàn)以下輸出:
示例2:根據(jù)參數(shù)長(zhǎng)度打印參數(shù)值
創(chuàng)建一個(gè)包含以下腳本的Bash文件,它會(huì)計(jì)算傳遞給腳本的參數(shù)總數(shù),并根據(jù)參數(shù)數(shù)量打印參數(shù)值。如果沒(méi)有傳遞任何參數(shù)給腳本,將會(huì)打印錯(cuò)誤消息。
#!/bin/bash
# Linux迷 www.linuxmi.com
#存儲(chǔ)參數(shù)的數(shù)量
len=$#
#檢查參數(shù)的總數(shù)
if [ $len -eq 0 ]; then
echo "未提供任何參數(shù)"
fi
#初始化計(jì)數(shù)器
counter=0
#根據(jù)計(jì)數(shù)器的值打印參數(shù)值
while (( $counter < $len ))
do
if [ $counter -lt 1 ]; then
echo $1
elif [ $counter -lt 2 ]; then
echo $2
elif [ $counter -lt 3 ]; then
echo $3
fi
((counter++))
done
輸出中腳本執(zhí)行了四次。當(dāng)沒(méi)有給出參數(shù)時(shí),打印了錯(cuò)誤消息。當(dāng)給出一個(gè)、兩個(gè)和三個(gè)參數(shù)值時(shí),打印了參數(shù)值。
示例3:計(jì)算參數(shù)值的平均數(shù)
創(chuàng)建一個(gè)Bash文件,包含以下腳本,用于計(jì)算參數(shù)值的平均數(shù)。腳本將計(jì)算傳遞給它的五個(gè)參數(shù)值的平均值。腳本中使用”bc”命令來(lái)計(jì)算平均值。如果沒(méi)有傳遞參數(shù)給腳本,則會(huì)打印錯(cuò)誤消息。
#!/bin/bash
# Linux迷 www.linuxmi.com
#檢查參數(shù)的總數(shù)
if [ $# -eq 5 ]; then
#計(jì)算參數(shù)值的總和
sum=$(($1+$2+$3+$4+$5))
#計(jì)算平均值
avg=$(($sum/5 | bc -l))
#打印平均值和參數(shù)值
echo "參數(shù)值為:$1 $2 $3 $4 $5"
echo "平均值:$avg"
else
#打印錯(cuò)誤消息
echo "參數(shù)的總數(shù)必須為5。"
fi
腳本在輸出中執(zhí)行了兩次。當(dāng)沒(méi)有給定參數(shù)時(shí),會(huì)打印錯(cuò)誤消息。當(dāng)給定了五個(gè)參數(shù)值時(shí),會(huì)打印參數(shù)值的平均值。
示例4:基于參數(shù)值打印錯(cuò)誤消息
創(chuàng)建一個(gè)Bash文件,其中包含以下腳本,根據(jù)”if”條件打印三條消息之一。第一個(gè)”if”條件檢查參數(shù)的數(shù)量是否為2。第二個(gè)”if”條件檢查參數(shù)值的長(zhǎng)度是否小于5。第三個(gè)”if”條件檢查第二個(gè)參數(shù)是否為正數(shù)。
#讀取參數(shù)值
name=$1
price=$2
#計(jì)算第二個(gè)參數(shù)的長(zhǎng)度
len=${#name}
#檢查參數(shù)總數(shù)
if [ $# -ne 2 ]; then
echo "參數(shù)總數(shù)必須為2個(gè)。"
exit
#檢查第一個(gè)參數(shù)的長(zhǎng)度
elif [ $len -lt 5 ]; then
echo "產(chǎn)品名稱必須至少包含5個(gè)字符。"
exit
#檢查第二個(gè)參數(shù)的值
elif [ $2 -lt 0 ]; then
echo "價(jià)格值必須為正數(shù)。"
exit
fi
#打印參數(shù)值
echo "產(chǎn)品$name的價(jià)格為TK. $price"
腳本在輸出中執(zhí)行了四次。當(dāng)沒(méi)有參數(shù)傳遞時(shí),會(huì)打印錯(cuò)誤消息”參數(shù)的總數(shù)必須為2″。當(dāng)?shù)谝粋€(gè)參數(shù)的長(zhǎng)度小于5時(shí),會(huì)打印錯(cuò)誤消息”產(chǎn)品名稱必須至少為5個(gè)字符長(zhǎng)”。當(dāng)?shù)诙€(gè)參數(shù)為負(fù)數(shù)時(shí),會(huì)打印錯(cuò)誤消息”價(jià)格值必須為正數(shù)”。