天天看點

shell中怎麼判斷輸入的是否是數字

在shell中我們經常要面臨一個問題就是,怎麼判斷我互動式的前端,使用者輸入的是否是數字呢?這裡小編我也就會兩種方法,是以今天就在這說一說

第一種:sed格式

首先:我們先(在指令行直接輸出模拟一下,如果都正确再在shell腳本中進行書寫。)直接echo輸出一下

echo "111asd"

第一步:思想

然後我們就要想一下我們要說用sed判斷,但是sed的最主要的功能是什麼?替換!!!當然是替換,既然是替換那麼我們能不能直接把echo輸出的數字直接替換掉,然後看這個輸出還剩下什麼呢?如果我們剩下的空,那麼我就基本可以确定我echo輸出的就是空,如果我sed替換之後不是空,那麼我是不是就是可以認為我echo輸出的不是數字或不全是數字呢?

第二步:指令行測試:

[root@localhost shell]# echo "111asd" | sed 's#[0-9]##g' | cat -A

asd$

[root@localhost shell]# echo "111" | sed 's#[0-9]##g' | cat -A

$

第三步:進行shell測試

經過第二步我們很明顯就能看出來這個想法是能夠實作的。是以在shell中配合-z(zero)-n(no zero)是完全可以實作的,是以這個時候我們就可以進行腳本的編寫測試了。

#!/bin/bash

##############################################################

# File Name: test.sh

# Version: V1.0

# Author: ls

# Created Time : 2017-02-24 06:25:13

# Description:

#互動式外部讀取

read -p "pleace input: " a1

#if進行數字判斷

if [ -z "$(echo $a1 | sed 's#[0-9]##g')" ]

then

#如果是數字輸出yes給$?一個1的傳回值并退出。

echo "yes"

exit 1

else

#如果不是數字輸出no給$?一個1的傳回值并退出。

echo "no"

[root@localhost shell]# sh test.sh

pleace input: 1

yes

pleace input: q1

no

第二種方法:

這個方法比較“特”,因為必須在shell的3.0版本以上才能使用(shell --version,我用的centos6.8是4.8版本的shell)

這裡我們要介紹shell中一個字元“=~”這個在shell中是字元比對的意思下面不多說直接介紹用法

read -p "input:" i

if [[ $i =~ ^[0-9]*$ ]]

echo "ok"