4

私はこの Bash/Shell に慣れていないので、ユニ割り当てのためにネットワーク分析を行う必要があります。

単純なループを実行しようとしているだけですが、2時間のGoogleクロールにもかかわらず修正できなかった奇妙なエラーが発生しました:

#!/bin/bash
x=1
while [ $x -le 5 ]
do
  echo "Welcome $x times"
  x=$(( $x + 1 ))
done

次の構文を使用して for ループを使用してみました。

#!/bin/bash
for i in {1..5}
do
   echo "Welcome $i times"
done

サーバーに最初のスクリプトを配置するたびに、次のメッセージが表示されます。

./temp.sh: line 8: syntax error: unexpected end of file

このファイルを実行する前に、次のコマンドを実行して権限を追加し、ファイルを実行可能にしました。

ls -l temp.sh
chmod +x temp.sh

補足として、ループに関する次のスタックオーバーフローの質問を見つけ、「修正されたコード」をコピーして同じエラーが発生しました: Looping a Bash Shell Script

バージョン 4 以降を実行しており、Windows 7 で G-VIM をテキスト エディターとして使用しています。

これを自分で解決することができました:

私の評判はまだ低すぎるので、現時点では自分で答えることができないので、人々が時間を無駄にするのを止めるために、ここで修正しました:

わかりました、私はこれをなんとか修正したので、周りを見回す他の人のためにこれを残します.

私の問題は、サーバーへの接続に FileZilla を使用していたことです。WinVi または G-Vim を使用してファイルを作成していたにもかかわらず、Windows を実行しているサーバーにファイルを転送したときに、FileZilla がファイルの末尾に何らかの形式の余分な文字を追加していたようです。

接続エージェントとして WinSCP に切り替えて試してみたところ、問題なく動作しました。

他の回答ありがとうございます。

ルイス

4

4 に答える 4

2

bashスクリプトを実行する前に、dos2unixコマンドを使用してください

dos2unix <bashScript>
./<bashScript>
于 2012-03-04T15:07:09.397 に答える
0

の後に改行がありますdoneか?それがトラブルの原因かもしれません。

bashあなたのマシンのCygwinで動作しますか? (そうすべきです。たとえば、shbash、またはそれkshを実行して、私の Mac にコピーすると正常に動作します。)

于 2012-03-04T15:07:01.863 に答える
0

私もこの問題を抱えています。この問題の実際の解決策は、スクリプトの書き込み中に編集メニューで EOL 変換が Unix 形式であるかどうかを確認することです。シェル スクリプトの Unix 形式である必要があります。

于 2013-08-31T08:19:13.923 に答える