关于getopts功能

时间:2017-04-14 12:27:39

标签: bash

我又回来了:( bash仍然存在一些问题,问题是要让脚本读取选项-r然后再进行一些操作。我想我做对了,但是当我试图运行它时,我收到了反馈说:" ./stripchars:第20行:-r:没有这样的文件或目录"。另一个人说:" ./stripchars:第26行:ne:命令未找到" 这是我的代码:

#!/bin/bash
FILE=$1
while getopts "r:" o; do
case "${o}" in
    r)
        r=${OPTARG}
        ;;
    *)
        ;;
esac
done
shift $((OPTIND-1))
if [ ! -z "$FILE" ]
then
exec 0< "$FILE"
fi
while IFS='' read -r LINE
do
echo "$LINE" | tr -d '${r}'
done
if [ -z "${r}" ]
then
if [ ! -z "$FILE" ]
then
    exec 0< "$FILE"
fi
while IFS='' read -r LINE
    do
    echo "$LINE" | tr -d '[:punct:]'
    done
fi

1 个答案:

答案 0 :(得分:1)

如果文件名确实是第一个参数(如FILE=$1暗示的那样),则getopts立即具有非零退出状态 (因为第一个参数是不是一个选项),你永远不会进入循环。您需要将呼叫更改为

myscript -r whatever foo.txt

并在解析选项的循环之后移动FILE=$1