2016-10-15 6 views
0

いくつかのサイトを検索しましたが、caseコマンドの構文もチェックしましたが、役に立たなかった。 どこにエラーがありますか?シェルスクリプト:構文エラー:予期しない単語( "in")

#!/bin/sh 
USER="user" 
DIR="/linktodirectory" 
###### script ###### 
case $1 in 

ご覧のとおり、私はそこに「in」があります。

start) 
su $USER -c "${DIR}/file start" 
;; 
stop) 
su $USER -c "${DIR}/file stop" 
;; 
restart) 
su $USER -c "${DIR}/file restart" 
;; 
status) 
su $USER -c "${DIR}/file status" 
;; 
*) 
echo "Usage: {start|stop|restart|status}" >&2 
exit 1 
;; 
esac 
exit 0 

私はUbuntu 16.04 64ビットを使用しています。

+0

あなたのスクリプトファイルにはおそらくDOSの行末が含まれています。つまり、パーサーは 'in \ r'を' in'と見なします。 – chepner

+1

[同じコードが他の場所で動作するときにシェルスクリプトが構文エラーを出すのはなぜですか?](http://stackoverflow.com/questions/31886144/why-is-a-shell-script-giving-syntax-errors- when-same-code-works-other- – chepner

答えて

0

最初の引数$ 1は二重引用符で囲む必要があります。それだけがcase文の引数です。

case "$1" in 
+0

キーワード 'case'の後の単語は、単語分割やパス名の拡張の対象にはなりません。引用符は不要です。 – chepner

0

最初にファイルのエンコードの問題が疑われています。

最初はあなたの構文は大丈夫です..少なくともエラーを与える行。

大文字と小文字を二重引用符で変更することができます。

問題が解決しない場合は、ファイルのエンコードを確認してください。

関連する問題