shell腳本中如何判斷一個變量是數字還是字符串,其實本身shell腳本中的所有變量值都是字符串,其中的數字也是數字字符串,只是人為的增加了數字的概念,具體可以參考如下內容。
1、判斷一個變量的值是否為整數:
可以借助於grep命令,結合正則表達式,整數是有[0-9]這10個數字組成,如果字串中有不是這10個數字的字符即表示不是整數,用正則表達式表示為[^0-9],編寫代碼如下:
while true
do
read -p "input value:" var;
if [[ $var == q || $var == Q ]];then
exit;
fi
echo "$var" | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
done
2、判斷一個變量的值是否為小數:
根據上面代碼,當輸入1.2的時候,就不能判斷為一個數了,要保證帶小數點的數也能正常判斷,可以借助於sed命令,通過其s替換操作,將變量值的“."替換掉即可。只要在上面的倒數第二條echo命令改為:
echo "$var" |sed 's/\.//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
3、判斷一個變量的值是否為正數或者負數:
根據上一步代碼,當輸入-1.2的時候,就不能判斷為一個數了,要保證正負數也能正常判斷,與2中的方法類似可以借助sed過濾掉+和-號即可。
echo "$var" |sed 's/\.//g' | sed 's/-//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
4、簡化代碼,數還可能是百分數比如15%,還有可能是指數,可以讓sed一次性全部過濾。將上面的代碼修改為:
echo "$var" |sed 's/\.\|-\|+\|%\|\^//g' | grep [^0-9] >/dev/null && echo "$var is not number" || echo "$var is number"
說明:在sed中可以使用或(|)運算符來表示過濾多個字符。以后可以隨時把表示數的符號加入到里面,這樣就算實現判斷變量是字符串數,還是其它的字符。