如何在getopts bash中使参数可选?

时间:2016-09-29 04:48:01

标签: bash getopts

我想创建一个可选字符(-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选项,但我无法使其正常工作。

1 个答案:

答案 0 :(得分:3)

可能最简单的方法是将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
...