使用 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))
我正在尝试使用 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))