getopts不捕获参数(文件重命名脚本)

时间:2015-08-08 14:47:31

标签: bash shell sh getopt getopts

基于Google's Style Guide,我制作了以下脚本。该脚本应采用a.txtb.txt等文件,并将其更改为PREFIX_1_prefix_a.txtPREFIX_1_prefix_b.txt。但是,当我输入:

$ sh rename_enum.sh -n 100 -P X -p Y

我希望X_100_Y_a.txtX_101_Y_b.txt,但我得到_1_a.txt_2_b.txt。谁能告诉我我做错了什么?

#!/bin/bash

#verbose='false'
nflag=1
Pflag=''
pflag='_'
files='*.txt'

while getopts 'nPpf' flag; do
    case "${flag}" in
        n) nflag="${OPTARG}" ;;
        P) Pflag="${OPTARG}_" ;;
        p) pflag="_${OPTARG}_" ;;
        f) files="${OPTARG}" ;;
        #v) verbose='true' ;;
        *) error "Unexpected option ${flag}" ;;
    esac
done

for i in ${files}
do
    mv "$i" "${Pflag}${nflag}${pflag}$i"
    nflag=$((nflag + 1))
done

1 个答案:

答案 0 :(得分:1)

我发现this man page解释了如果一个标志有一个参数,那么 它后面应该是冒号。我所要做的只是换线......

while getopts 'nPpf' flag; do

...到......

while getopts 'n:P:p:f:' flag; do

......我得到了理想的结果。感谢您的评论!