-2

これが私の問題です。私はこのシェルスクリプトにしばらく取り組んできましたが、何が間違っているのかわかりません。シェル スクリプトは、grep:textfile1.txt no such file or directoryやなどのエラーを返しline 10 syntax error 'else'ます。どの構文がどこにあるのかわかりません。これが私のスクリプトです。

#!/bin/bash

echo "Find The file you want to search the word in"
read filename
cd ~ $filename
echo "enter the word you want to find"
read word1
grep -F "$word1" "$filename"
if $word exists in $filename then
        echo "$word exist in $filename"
else
        echo "the file or word doesn't exist!"
4

1 に答える 1

2

スクリプトにエラーが多すぎます:

cd ~ $ファイル名

これ$filenameは無意味です。シェルは単にそれを無視し、作業ディレクトリをホーム ディレクトリに変更します。また、ホーム ディレクトリに変更すると、後で指定したファイル名で実行grepしたときにプログラムの動作に影響することに注意してください。相対パスは、ホーム ディレクトリからの相対パスでなければ機能しないため、ファイルが見つからない可能性があります。

grep -F "$単語1" "$ファイル名"

実行grepしますが、その結果を評価しません。

$filename に $word が存在する場合

bash には「exists」演算子はありません。また、 の前にセミコロンを置くthenか、改行する必要があります。

fi最後に、ifステートメントの結びを付けませんでした。

私はあなたがこのようなことを意味したと思います:

#!/bin/bash

echo "Find The file you want to search the word in"
read filename
cd
echo "enter the word you want to find"
read word1
if grep -qF "$word1" "$filename" 2>/dev/null; then
    echo "$word1 exists in $filename"
else
    echo "the file or word doesn't exist!"
fi
于 2013-11-10T21:38:55.617 に答える