제1장: The Missing Code Library -- 5. 합 법화 정형 입력

2820 단어 linuxshellbash
당신 이 본 두 번 째 스 크 립 트 와 유사 하 게 정형 입력 을 정확하게 하 는 것 은 매우 간단 해 보 입 니 다. 음 수 를 확보 하지 않 아 도 입력 할 수 있 습 니 다.문 제 는 모든 수치 가 마이너스 만 있 고 숫자의 머리 에 나타 나 야 한 다 는 점 이다.이 스 크 립 트 의 수정 프로그램 은 음수 도 정확하게 포맷 될 수 있 고, 더욱이 이 스 크 립 트 는 사용자 가 지정 한 범위 에 숫자 를 고정 시 킬 수 있 습 니 다.
#!/bin/sh
 
 # validint.sh --       ,    。
 
 function validint
 {
     #        。
     #        $2 $3  ,   : $2 <=      <= $3
 
     number="$1"; min="$2"; max="$3"
 
     if [ -z $number ]; then
         echo "   。    。" >&2
         return 1
     fi
 
     if [ "${number%${number#?}}" = "-" ]; then     #             
         testvalue="${number#?}"                    #        
     else
         testvalue="$number"
     fi
 
     nodigits="$(echo $testvalue | sed 's/[[:digit:]]//g')"
 
     if [ ! -z $nodigits ]; then
         echo "       !    ,     、   " >&2
         return 1
     fi
 
     if [ ! -z $min ]; then
         if [ "$number" -lt "$min" ]; then
             echo "      :       $min" >&2
             return 1
         fi
     fi
 
     if [ ! -z $max ]; then
         if [ "$number" -gt "$max" ]; then
             echo "      :       $max" >&2
             return 1
         fi
     fi
     return 0
 }

 스 크 립 트 실행:
   전체 스 크 립 트 는 하나의 함수 로 다른 셸 스 크 립 트 에 복사 하거나 라 이브 러 리 파일 로 복사 할 수 있 습 니 다.명령 행 에서 이 파일 을 실행 할 수 있 도록 몇 줄 만 간단하게 추가 하면 됩 니 다.
if validint "$1""$2""$3"; then
    echo "That input is a valid integer value within your constraints"
fi
실행 결과:
./validint.sh        
    。    。
 ./validint.sh 1234.3
        !    ,     、   
 ./validint.sh 103 1 100
       :       100
 ./validint.sh -17 0 25
       :       0
 ./validint.sh -17 -20 25
 That input is a valid integer value within your constraints

스 크 립 트 분석:   이 스 크 립 트 에서 첫 번 째 문자 가 마이너스 인지 아 닌 지 를 판단 하 는 문 구 를 주의 하 십시오.
if [ "${number%${number#?}}" = "-" ]; then

   첫 번 째 문자 가 마이너스 라면 정수 의 수치 부분 을 testvalue 에 부여 합 니 다.그리고 이 마이너스 가 아 닌 값 은 그 안에 포 함 된 모든 숫자 를 제거 하고 나머지 를 테스트 한다.스 크 립 트 에 포 함 된 if 문 구 를 AND 로 연결 하려 고 시도 할 수도 있 습 니 다.예 를 들 어 아래 코드 도 실행 할 수 있 을 것 같 습 니 다.
if [ ! -z $min -a "$number"-lt "$min"]; then     echo "입력 한 값 이 너무 작 습 니 다: 입력 한 하한 선 은 $min 입 니 다"> & 2    exit 1 fi    그러나 셸 스 크 립 트 에서 AND 문 구 를 연결 하 는 두 번 째 테스트 조건 이 테스트 되 지 않 을 것 이 라 고 장담 할 수 없습니다. AND 앞의 첫 번 째 테스트 가 False 로 증명 되 었 더 라 도.(주: 셸 의 불확실 성, 구체 적 인 원리, 일곱 째 는 아직 확실하게 탐색 하지 못 했 습 니 다. 아 는 친구 가 있 으 면 일곱 째 에 게 대답 해 보 세 요. ^ ^)

좋은 웹페이지 즐겨찾기