###前提・実現したいこと
以下のソースコードを実行するとエラーがでます。
原因と対処方法をご教示頂けませんでしょうか。
###発生している問題・エラーメッセージ
./search.sh: line 10: 期待してない token then' のあたりにシンタックスエラー ./search.sh: line 10:
then'
###ソースコード
#!/bin/bash
target=target.txt
for line in cat list.txt
do
grep ${line} ${target}
if["$?" -eq 1] then "${line} was found" fi
done
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
if
はキーワードなので、空白/タブ/改行で区切る必要があります。つまり、if
の後に空白が必要。
また、[
はコマンドなので、同じく空白/タブ/改行で区切る必要があります。つまり[
の前後に空白が必要。
]
は[
コマンドの引数ですが、]
単独で引数となる必要があるため、同じく空白/タブ/改行で区切る必要があります。
あと、色々間違い。
Bash
1#!/bin/bash 2 3target=target.txt 4 5for line in `cat list.txt` 6do 7 grep ${line} ${target} 8 9 if [ "$?" -eq 0 ] 10 then 11 echo "${line} was found" 12 fi 13done
投稿2016/07/02 12:37
総合スコア85766
0
解決はしたようですが…
Bash
1#!/bin/bash 2 3target=target.txt 4 5for line in `cat list.txt`;do 6grep -q ${line} ${target};if [ $? -eq 0 ];then;echo "${line} was found";fi 7done
シェルスクリプトは基本的に1行につきひとつ書けます。
複数書きたければセミコロンで区切るという約束になってます。
投稿2016/07/02 12:59
総合スコア7460
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
if["$?" -eq 1] ↓ if [ $? -eq 0 ] あるいは if grep -q "${line}" "${target}"
[
, ]
の前後にスペースを入れる必要があります。
また、grep で見つかった場合の終了ステータスは 1 ではなく 0 です。
[
を使わずに、直接 grep コマンドの終了ステータスを if で判定する方法もあります。
for line in `cat list.txt`
文法は問題ないです。
1行に 1単語(途中にスペースなし)であればいいですが、
行の途中にスペースがあると意図した動きにならないと思います。
echo が必要なのは、他の方の回答どおり。
投稿2016/07/02 09:21
総合スコア12173
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
ベストアンサー
未検証なので文法的な部分は確認できていませんが、"${line} was found"
行はecho
が必要ですかね?
bash
1echo "${line} was found"
投稿2016/07/02 05:14
総合スコア2335
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/02 07:32
退会済みユーザー
2016/07/02 10:12
2016/07/03 15:23
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。