0
私の目標は、私は私のテキストファイルの行数をカウントし、テキストファイルの各行ループ内のファイルから行を読み込む方法は?
まずTTSことです:
#!/bin/bash
LINES=$(cat /home/mytext.txt | wc -l)
私はループを定義したい:
let "n = $LINES"
while [ $n -ne 0 ]
TTS "the first line"
sleep 5
let "n--"
done
exit
次に、次の行が存在する限り、ループは繰り返されます。何をしたい
Re:「set -e」(エラー時に終了する)でスクリプトを実行すると問題が発生します。それはまったく無関係で、私と無関係のようです。 '|| [-n "$ CUR_LINE"] 'は入力に改行がない場合、最後の行はまだ処理されます。 – ruakh
++;しかし、パイプライン(したがってサブシェル)を 'cat'で使用するのではなく、' done'の後に入力リダイレクション( '<')を使用して入力を提供する方が良いでしょう。 (あなたは意図的に '\'を使って明示的に行継続文字を表示することができますが、 '|'の後には必要ないことに注意してください - 現在の行が完全なコマンドでない場合、行(s))。 – mklement0
@ruakh:理由についての良い点。 'set -e'は実際にはこれにはまったく関係ありませんが、関連していません_:' while'、 'until'、' if'、または 'elif'予約に続いて複合リストを実行するときに' -e'設定は無視されますword、 '! '予約語で始まるパイプライン、または最後のもの以外のAND-ORリストのコマンドであることを意味します。 - [POSIX仕様](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25_03)。言い換えれば、 'set -e'は_conditionals_で実行されるコマンドには明示的には適用されません。 – mklement0