2017-04-14 64 views
-2

我又回来了:( 还有一些bash的问题,问题是要让脚本读取一个选项-r然后做一些进一步的操作,我想我说得对,但是当我试图运行它,我得到了一个反馈:“./stripchars:第20行:-r:没有这样的文件或目录”,另一个说:“./stripchars:line 26:ne:command not found” Here是我的代码:关于getopts函数

#!/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

如果文件名还真是第一个参数(如暗示的FILE=$1),然后getopts有一个非零退出状态立即(因为第一变元t不是一个选项),并且你永远不会进入循环。您需要将您的通话更改为类似

myscript -r whatever foo.txt 

和来解析选项的循环之后移动FILE=$1