2016-09-29 82 views
0

我想讓一個可選字符(-t)不能接受getopts bash中的任何參數。這是我走到這一步,如何在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選項,但我不能讓它工作。

回答

3

可能是最簡單的方法是設置species_treetrue當且僅當有該-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 
... 
+1

真棒。它完全按照我想要的方式工作。萬分感謝!!! – upendra

+0

不客氣:) – webb