このエラーsyntax error near unexpected token 'done'
が発生し続けます:しかし、その理由がわかりません。
dos2unix *.sh
after を追加しようとしました#!/bin/sh
が、「完了」エラーに加えて、そのようなファイルまたはディレクトリがないというエラーが表示されました。
これは.shファイルです。スクリプトを書くのは初めてです。助けて?
私は走っています
sh thisfile.sh program_input 入力
Linuxの場合
編集変数の周りにいくつかの引用を追加しました-同じエラー
#!/bin/sh
fst=$1
input=$2
while read line
do
result=$(cat "$line" | program "$fst")
if [ "$result" = "" ];
then
printf "$line\t=>\t *none* 0\n"
else
printf "$line\t=>\tyes\n"
fi
done < "$input"
「$input」は「they」「can」「fish」「they」「can」「take」「table」のようなたった4行の単語です
実行するcat "$line" | program "$fst"
とうまくいきます
ループ内のすべてを取り出して printf $line だけを実行すると、同じ「完了」構文エラーが発生することに注意してください。
syntax error near unexpected token 'done'
は、Bash がその前にdone
一致do
するものがない予約語を見つけたときに発生するエラーです。これは引用符とは関係ありませんが、DOS/Windows スタイルの CRLF 行末を持つファイルに関係がある可能性が高いです。\r
シェルはキャリッジ リターン (CR, ) を通常の文字と見なすため、予約語do
ではなく、do\r
代わりにシェルが認識します。一方、最後の行ではdone
、行末から分離されているため、CR はそのスペースで認識されます。
を介してスクリプトファイル自体を実行しますdos2unix
。スクリプト ファイルにdos2unix
コマンドを追加しないでください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加