Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Чтение ввода(баш)  (Прочитано 635 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн alsoijw

  • Автор темы
  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Чтение ввода(баш)
« : 23 Июль 2014, 17:54:24 »
Задача: составить список исходных файлов исключив файлы резервных копий(заканчиваются на ~)
Реализация: получение содержимого папки, конвеер, скрипт(отбрасывающий лишнее.
Трудность: вывод от предыдущей программы многострочен. А прочитать больше одной строки не получается - скрипт завершает работу. Читаю с помощью read.
Код: (sh) [Выделить]
read answer
read answer1
echo $answer1
echo $answer
ЧЯДНТ?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Чтение ввода(баш)
« Ответ #1 : 23 Июль 2014, 20:01:15 »
Ну как партизан на допросе... Вывод от "предыдущей программы" можно привести?
А в общем случае решается либо через цикл while , либо массивом.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alsoijw

  • Автор темы
  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Чтение ввода(баш)
« Ответ #2 : 23 Июль 2014, 20:40:45 »
Пока писал комментарий решил.
Код: (bash) [Выделить]
#!/bin/sh
var1=9

while [ "$var1" != "/" ]
do
if [ "$var1" = "" ]; then
exit 0
else
read var1
len=`expr length $var1`
lastchar=`expr substr $var1 $len 1`
if [ "$lastchar" != "~" ]; then
echo $var1
fi
fi
done

exit 0

Пользователь решил продолжить мысль 23 Июль 2014, 21:10:40:
Хотя нет, не получилось, вывод не должен содержать сообщений об ошибках. Модифицировал, не работает#!/bin/sh

f="
text
print
"
echo $f
var1=9

while [ "$var1" != "/" ]
do
if [ "$var1" = "" ]; then
exit 0
else
read var1
len=`expr length $var1`
lastchar=`expr substr  $var1 $len 1 2>/dev/null `
if [ "$lastchar" != "~" ]; then
echo $var1
fi
fi
done

exit 0
Вот вывод ls build.sh   CodeTab.gs   GenieDevelop     GenieDevelop.gs~  m~             SourceFile.gs~  t     tt
build.sh~  CodeTab.gs~  GenieDevelop.gs  m                 SourceFile.gs  src             TODO
, вот вывод скриптаls | sh ~/1.sh
text print
build.sh
CodeTab.gs
GenieDevelop
GenieDevelop.gs
m
SourceFile.gs
src
t
TODO
tt
expr: синтаксическая ошибка
О синтаксических ошибках информацию выводить ненужно.
« Последнее редактирование: 23 Июль 2014, 21:10:40 от alsoijw »
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Azure

  • Модератор раздела
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Чтение ввода(баш)
« Ответ #3 : 23 Июль 2014, 21:18:16 »
А ls -B не подойдёт?
Если просто для любого ввода
Код: (bash) [Выделить]
check_last_simbol {
# print line if the last simbol in line != SIMBOL
# USAGE: list of arguments | check_last_simbol SIMBOL
if [ "${#1}" = 1 ]
then
  while read
  do
    if [ ${REPLAY: -1} != "$1" ]
    then
      printf "%s\n" "$REPLAY"
    fi
  done
else
  printf "Argument should be just one along simbol\n"
  printf "to avoid globbing special simbols should be escaped with \\ \n"
  exit 1
fi
}
« Последнее редактирование: 23 Июль 2014, 22:00:07 от Azure »
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alsoijw

  • Автор темы
  • Старожил
  • *
  • Сообщений: 4073
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Чтение ввода(баш)
« Ответ #4 : 23 Июль 2014, 23:33:26 »
Azure, за ls -B спасибо.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

 

Страница сгенерирована за 0.079 секунд. Запросов: 24.