LINUX.ORG.RU

Как завершать цикл при обработке пустой строки?

 


0

1

Есть текстовый файл file.txt на каждой строке которого находится то или иное число. Я сделал так:

read a
echo $a | sed -r 's/(.){1}/&\n/g' > file.txt
x=$(wc file.txt)
while [[ x != "0 0 0 file.txt" ]]
do
y=$(cat file.txt | head -n1 | tail -n1)
sed -i '1d' file.txt
if [[ c = 1 ]]
then
команды
else
команды
[еще несколько циклов if для разных вариантов]
done
еще команды

Цикл получается бескоечный, а надо, чтобы по его завершении делались другие действия. Как сделать, чтобы цикл завершался, пройдя все строки в файле?

Upd: сделал тупо

echo 's' >> file.txt
while [[ y != "s" ]]
do
команды

Но работает)



Последнее исправление: Mr_Hydus (всего исправлений: 3)

Ответ на: комментарий от SpaceRanger

x - это вывод от wc, он пустым не будет.

Вы имели в виду while [[ y != " "]]?

Upd: в любом случае, такой цикл тоже крутится бесконечно.

Mr_Hydus
() автор топика
Последнее исправление: Mr_Hydus (всего исправлений: 3)
Ответ на: комментарий от Mr_Hydus

в условии же Х стоит. Если он не будет пустым, то и цикл не будет завершаться, не? Если нужен построчное чтение файла, то я б сделал что то навроде

while read y
do
  if [ "$y" != " "]; then
     DoSmth
  else
     DoSmth
  fi
done < file.txt
SpaceRanger ★★
()
Последнее исправление: SpaceRanger (всего исправлений: 2)

Можно проще при помощи команды read.

#! /bin/sh

# Имя файла с данными
FILE=file.txt
# Заполняем файл тестовыми значениями
cat << EOF > "$FILE"
12
17
24
55
78
EOF
# Читаем файл построчно
while read -r LINE; do
    echo "$LINE"
done  < "$FILE"

Результат:

$ ./readln.sh
12
17
24
55
78
RussianWarShip
()