Как сделать аргумент необязательным в getopts bash?

Я хотел бы сделать один из необязательных символов (-t), который не должен принимать никаких аргументов в getopts bash. Вот где я до сих пор

while getopts ":hb:q:o:v:t" opt; do
  case $opt in
    b)
     Blasting_list=$OPTARG
     ;;
    l)
    query_lincRNA=$OPTARG 
     ;;
    q)
    query_species=$OPTARG 
     ;;
    o)
     output=$OPTARG # Output file
     ;;  
    t)
     species_tree=$OPTARG
     ;;
    h)
    usage  
     exit 1
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
    :)
      echo "Option -$OPTARG requires an argument." >&2
      exit 1
      ;;
  esac
done

Я хочу запустить приведенный выше скрипт следующим образом.

bash test.sh -b Blasting_list.txt -l Sample_query.fasta -q Atha -o test_out -v 1e-20 -t

Затем он должен выполнить приведенный ниже цикл

(-----)
if [ ! -z $species_tree ]; 
then 
  mkdir -p ../RAxML_families
  perl /Batch_RAxML.pl aligned_list.txt
  rm aligned_list.txt
else
  rm aligned_list.txt
fi
(-----)

И если я побегу так, он должен пропустить цикл.

bash test.sh -b Blasting_list.txt -l Sample_query.fasta -q Atha -o test_out -v 1e-20
(-----)
(-----)

Я пытался играть с параметрами getopts, но не могу заставить их работать.


person upendra    schedule 29.09.2016    source источник


Ответы (1)


вероятно, самый простой способ - установить species_tree в true, если есть флаг командной строки -t:

species_tree=false                       # <-- addition here

while getopts ":hb:q:o:v:t" opt; do
  case $opt in
...
    t)
      species_tree=true                  # <-- change here
      ;;
...
  esac
done

if $species_tree; then                   # <-- change here
...
person webb    schedule 29.09.2016