getopts에 전달된 옵션이 충분하지 않은 것을 감지하는 방법

getopts에 전달된 옵션이 충분하지 않은 것을 감지하는 방법

매개변수가 충분하지 않다는 것을 사용자에게 알려주는 코드 줄을 추가하고 싶습니다. (아마 어딘가에 오류 메시지가 있을 것입니다. 하지만 어디에 있는지 잘 모르겠습니다.)

blastfile=
comparefile=
referencegenome=
referenceCDS=

help='''
  USAGE:   sh lincRNA_pipeline.sh
    -c   </path/to/cuffcompare_output file>
    -g   </path/to/reference genome file>
    -r   </path/to/reference CDS file>
    -b   </path/to/RNA file>
'''

while getopts ":b:c:g:hr:" opt; do
  case $opt in
    b)
      blastfile=$OPTARG
      ;;
    c)
      comparefile=$OPTARG
      ;;
    h)
      printf "$help"
      exit 1
      ;;
    g)
      referencegenome=$OPTARG
      ;;
    r)
     referenceCDS=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

답변1

한 가지 방법은 getopts옵션을 구문 분석할 때 옵션 수를 세는 것입니다. 주어진 금액보다 적은 금액이 전달되면 종료할 수 있습니다.

#!/usr/bin/env bash
blastfile=
comparefile=
referencegenome=
referenceCDS=

help='''
  USAGE:   sh lincRNA_pipeline.sh
    -c   </path/to/cuffcompare_output file>
    -g   </path/to/reference genome file>
    -r   </path/to/reference CDS file>
    -b   </path/to/RNA file>
'''

while getopts ":b:c:g:hr:" opt; do
    ## Count the opts
    let optnum++
    case $opt in
        b)
            blastfile=$OPTARG
            echo "$blastfile"
            ;;
        c)
            comparefile=$OPTARG
            ;;
        h)
            printf "$help"
            exit 1
            ;;
        g)
            referencegenome=$OPTARG
            ;;
        r)
            referenceCDS=$OPTARG
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
        :)
            echo "Option -$OPTARG requires an argument." >&2
            exit 1
            ;;
    esac
done

[[ $opts -lt 3 ]] && echo "At least 3 parameters must be given"

관련 정보