1

引数の解析に関するこのチュートリアルに従っていました。引数の有無にかかわらずスクリプトを実行すると、「45 行目: 構文エラー: 予期しないファイルの終わり」が表示されます。これは、スクリプトの最後の行の次の行です。ただし、エラーは表示されません(bashスクリプトの新機能...)。

#!/bin/bash

#Explain arguments that can be passed in
argumentUsage(){
    cat << EOF
    usage: $0 options

    This script configures rsync to backup SOURCE to DESTINATION and provide notifications on status.

    OPTIONS:
       -h    Show this message
       -s    Source location
       -d    Destination location
    EOF
}

DESTINATION=
SOURCE=

while getopts "hs:d:" OPTION
do 
   case $OPTION in
    h)
       argumentUsage()
       exit1
       ;;
    s)
       SOURCE=$OPTARG
       ;;
    d)
       DESTINATION=$OPTARG
       ;;
    ?)
       argumentUsage()
       exit
       ;;
   esac
done
4

1 に答える 1

8

EOFここをインデントしたからです

argumentUsage(){
     ...
     OPTIONS:
       -h    Show this message
       -s    Source location
       -d    Destination location
     EOF
}

インデントにより、bash は終了する を「認識」しないEOFため、実質的にヒアドキュメントは終了せず、「予期しないファイルの終わり」につながります。

于 2013-06-27T12:21:28.160 に答える