shell 判斷乙個變數是數字還是字串

2022-05-01 10:42:07 字數 1481 閱讀 3871

shell指令碼中如何判斷乙個變數是數字還是字串,其實本身shell指令碼中的所有變數值都是字串,其中的數字也是數字字串,只是人為的增加了數字的概念,具體可以參考如下內容。

1、判斷乙個變數的值是否為整數:

可以借助於grep命令,結合正規表示式,整數是有[0-9]這10個數字組成,如果字串中有不是這10個數字的字元即表示不是整數,用正規表示式表示為[^0-9],編寫**如下:

while true

doread -p "

input value:

" var;

if [[ $var == q || $var == q ]];then

exit;

fiecho

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

shell判斷乙個變數是否為空

1.最直接簡單的判斷 a echo a is null 不用那些if語句了,直接縮短 量。2.變數通過 引號引起來 如下所示 可以得到結果為 is null.bin sh a if n a then echo is null else echo not null fi3.直接通過變數判斷 如下所示 ...

shell中if判斷乙個變數為空

1.最直接簡單的判斷 a echo a is null 不用那些if語句了,直接縮短 量。2.變數通過 引號引起來 如下所示 可以得到結果為 is null.bin sh a if n a then echo is null else echo not null fi3.直接通過變數判斷 如下所示 ...

判斷乙個數字是否是回文

最近碰到乙個題目,其中一步判斷數字是否為回文 由於題目要求是最短時間實現,不要考慮實現本身的效率 1如果直接去實現,就是比較數字的最高位值和最低位,然後再。public boolean isp int x if x temp bit bit為數值位數 int temp1,temp2 for int ...