SHELL 은 문자열 이 숫자 인지 아 닌 지 를 판단 하 는 몇 가지 방법

3813 단어 cshell
PS:  셸 결합 C 는 아주 강력 한 스 크 립 트 를 쓸 수 있 을 것 입 니 다!파 이 팅 ~ ~
Shell 에 서 는 이 매개 변 수 를 후속 코드 에 전달 할 지 여 부 를 결정 하기 위해 매개 변수의 종 류 를 판단 해 야 합 니 다.
문자열 이 숫자 인지 아 닌 지 를 판단 하 는 두 가지 방법 을 간단하게 소개 합 니 다.
 
1. Linux 에서 상당히 큰 X 의 계산기 bc 를 사용 합 니 다. 물론 여기 에는 큰 인재 가 좀 있 지만 방법 이 라 고 할 수 있 습 니 다.
echo $str | bc
문자열 을 인쇄 하여 계산기 bc 에 파 이 프 를 통 해 전달 합 니 다. 이 프로그램의 기본 기능 은 표현 식 의 값 을 계산 하 는 것 입 니 다. 그러나 특히...
하나의 숫자 를 입력 하면 되 돌아 오 는 값 은 여전히 이 숫자 (하나의 숫자 는 특수 한 표현 식) 입 니 다. 이 특성 에 따라 하나의 문자열 이 숫자 인지 아 닌 지 를 판단 할 수 있 습 니 다.
방법 1 에 따라 테스트 스 크 립 트 를 드 립 니 다.
#!/bin/sh 

#                (   ,  ,  ,   )。
#  :Usag: [    ]
# checknum.sh

 
#          
iftest $# -lt 1     #       2 ,         ,  。
thenecho "    ,    :checknum n1 n2 n3... (      )。"
exit1               #    
fi

 
#      
forstr in $*         #       str,               。
do
{
#          bc,              ,         。
var=$(echo$str | bc 2>/dev/null)
#            ,bc        ,    ,               。
if ["$var" != "$str" ] #  bc          ,        ,     。
then {
echo "$str       。"
}
#       ,                      。
elifecho $str|grep "\." >/dev/null 2>&1  
then {
echo "$str       。"
}
else {
#           ,   2,   0    , 1    。
if test `expr $str % 2` -eq 0
then echo "$str      。"
else echo "$str      。"
fi
}
fi
}
done
exit

방법 2: 문자열 이 숫자 인지 아 닌 지 를 판단 하기 위해 프로그램 을 작성 한 다음 스 크 립 트 에서 이 프로그램 을 호출 하면 목적 을 달성 할 수 있 습 니 다.예 를 들 어 간단 한 C 프로그램 을 써 서 문자열 이 숫자 인지 아 닌 지 를 판단 한다.프로그램 코드 는 다음 과 같 습 니 다:
//check.c

#include<stdio.h>
#include<string.h>
 
 /****************************
 * check a char == digital
*****************************/

intisnumber( char ch )  //
{
if( '0'<= ch && '9'>=ch )
{
return 1;        //digital
}
else
{
return 0;        //notdigital
}
}

 /****************************
 * check a string == numbers
*****************************/

int check( char *str )
{
int i = 0;
int dot = 0;    //thenumber of decimal point
for(; i<strlen(str); i++ )
{
if( !isnumber( str[i]) )
{
if( '.' == str[i] )
{
dot++;
}
else
{
return 0;   // not number
}
}
}

if( 0 == dot )
{
return 1;  //is number
}
else if( 1 == dot )
{
return 2;  //is floatingpoint number, include 4.0 3. .3etc.        
}
else
{
return 0;   //is notnumber
}
}

 
 /****************************
 *  mainfuction just recieve one parametter
*****************************/

int main(int argc, char* argv[])
{
int i = 0;
if( 2 != argc )        
{
printf("Parametter Error, just recieve oneparametter.
"); return 3; } printf("%d", check(argv[1]) ); return 0; }

쓰다
GCC
컴 파일 후 실행 가능 한 파일 이름 을
check
그리고 스 크 립 트 에서 호출 합 니 다.
check
문자열 을 받 아들 여 유형 을 판단 한 다음 판단 결 과 를 출력 하 는 기능 이 있 습 니 다.스 크 립 트 의 내용 은 다음 과 같 습 니 다.
#!/bin/sh

#checknum.sh
if [$# -lt 1 ]
then {
echo "Usage: ./checknum.sh n1, n2, ..."
exit 1
}
fi
for var in $*
do
{
res=$(echo `./check $var`)
if [ $res -eq 0 ]
then {
echo "$var is not number."
}
elif [ $res -eq 1 ]
then {
if [ `expr $var % 2` -eq 0 ]
then {
echo "$var is even number."
}
else {
echo "$var  is oddnumber."
}
fi
}
elif [ $res -eq 2 ]
then {
echo "$var is float number."
}
else
{
echo "Unknow Error."
}
fi
}
done
exit 

두 번 째 방법 을 사용 하 는 전 제 는 시스템 에 GCC 나 다른 C 컴 파일 러 가 설치 되 어 있다 는 것 이다.물론 python, 자바 등 다른 언어 로 도 가능 할 것 입 니 다.
이 두 가지 방법 외 에 또 다른 방법 이 있 을 것 이 라 고 믿는다. 예 를 들 어 정규 식 을 사용 하 는 것 이다.
if echo "$var" | grep -q '^[a-zA-Z0-9]\+$'; then
echo "$var is number."
else
echo "$var is not number."
fi

원문

좋은 웹페이지 즐겨찾기