SHELL 은 문자열 이 숫자 인지 아 닌 지 를 판단 하 는 몇 가지 방법
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
원문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.