在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"