2017-04-14 47 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