我又回来了:( 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
答案 0 :(得分:1)
如果文件名确实是第一个参数(如FILE=$1
暗示的那样),则getopts
立即具有非零退出状态 (因为第一个参数是不是一个选项),你永远不会进入循环。您需要将呼叫更改为
myscript -r whatever foo.txt
并在解析选项的循环之后移动FILE=$1
。