shell 判斷一個變量是數字還是字符串


       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中可以使用或(|)運算符來表示過濾多個字符。以后可以隨時把表示數的符號加入到里面,這樣就算實現判斷變量是字符串數,還是其它的字符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM