Como posso detectar que opções insuficientes foram passadas com getopts

1

Eu quero adicionar uma linha de código que diga ao usuário que argumentos suficientes não foram fornecidos (pode ser uma mensagem de erro em algum lugar, mas não tenho certeza de onde?)

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
    
por upendra 29.03.2015 / 21:03

1 resposta

1

Uma abordagem seria contar as opções, pois getopts as analisa. Então, você pode sair se menos que um determinado número foi passado:

#!/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"
    
por 29.03.2015 / 21:16

Tags