繁体   English   中英

使用getopts传递命令行参数时出现问题

[英]Problem in passing command line arguments using getopts

我正在尝试使用getopts将命令行参数传递给我的工作流脚本,但是代码抛出错误

以下是用于传递命令行参数的代码段

# take strings as arguments.
while getopts "TDNUW:" opt; do
  case "$opt" in
     T) T="$OPTARG" ;;
     D) D="$OPTARG" ;;
     N) N="$OPTARG" ;;
     U) U="$OPTARG" ;;
     W) W="$OPTARG" ;;
     \?) echo "Usage:[-T T1wfilename] [-D Dfilename] [-N Stream_Number] [-U User] [-W Workflow]";;

    esac
  done 
 shift $(expr $OPTIND - 1)

#Subjects Directory with $U : UserId

SUBJECTS_DIR=/Bio/Bmax/data/imaging_data/$U

#Subjects path with $W : workflow number    

SUBJECT_PATH=$SUBJECTS_DIR/$W

我尝试使用选项调用脚本

./code.sh -T dummy_t1t2.nii.gz -D dummy_dti.nii.gz -N 100000 -U Markus -W Workflow_000000000000334

我遇到一个错误

Error: input image /Bio/Bmax/data/imaging_data/// not valid

我通过命令行传递的参数未由代码解释,有人可以向我提供一些提示,为什么我的脚本无法识别这些参数。

您需要手动分配要使用的变量。 getopts不会为您完成工作。

在每个字母选项之后,需要一个:来告诉getopts这是一个带有参数的选项。

while getopts "T:D:N:U:W:" opt; do
  case "$opt" in
     T) T="$OPTARG" ;;
     D) D="$OPTARG" ;;
     N) N="$OPTARG" ;;
     U) U="$OPTARG" ;;
     W) W="$OPTARG" ;;
     \?) echo "Usage:[-T T1wfilename] [-D Dfilename] [-N Stream_Number] [-U User] [-W Workflow]" ;;
    esac
 done 
 shift $((OPTIND - 1))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM