「予期しないタグ付近の構文エラー」が発生するのはなぜですか? [閉鎖]

「予期しないタグ付近の構文エラー」が発生するのはなぜですか? [閉鎖]

約10,000個(約180x50x2)のCSVファイルがあり、以下のようにそれらを組み合わせたいのですが、何らかの理由で内部forループが失敗しますsyntax errorlastFile

#!/bin/bash
dir='/home/masi/CSV/'
targetDir='/tmp/'
ids=(118 119 120)
channels=(1 2)
for id in ids;

        do
        for channel in channels;

                # example filename P209C1T720-T730.csv
                lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"
                # show warning if last file does not exist
                if [[ -f $lastFile ]]; then
                    echo "Last file "$lastFile" is missing" 
                    exit 1
                fi

                filenameTarget="$targetDir'P'$id'C'$channel'.csv'"
                cat $dir'P'$id'C'$channel'T'*'.csv' > $filenameTarget

        done;
done

間違い

makeCSV.sh: line 12: syntax error near unexpected token `lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"'
makeCSV.sh: line 12: `      lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"'

オペレーティングシステム:Debian 8.5
Linuxカーネル:4.6バックポート

ベストアンサー1

do2番目のforループに1つはありません。

for id in ids;

        do
        for channel in channels; do # <----- here ----

                # example filename P209C1T720-T730.csv
                lastFile="$dir'P'$id'C'$channel'T1790-T1800.csv'"
                # show warning if last file does not exist
                if [[ -f $lastFile ]]; then
                    echo "Last file "$lastFile" is missing" 
                    exit 1
                fi

                filenameTarget="$targetDir'P'$id'C'$channel'.csv'"
                cat $dir'P'$id'C'$channel'T'*'.csv' > $filenameTarget

        done;
done

コメントの議論によれば、あなたがループ構文について混乱していることがわかりましたfor

ループのおおよその構文は次のとおりですfor

for name in list; do commands; done

doコマンドの前には常にコマンドがあり、;コマンドの後には改行(または改行)が必要です。done

以下は、より多くの改行文字を使用したバリエーションです。

for name in list
do
    commands
done

おすすめ記事