LINUX.ORG.RU

Проблема в работе самодельного bash скрипта

 , ,


0

1

Всем привет!

Предыстория и немного нытья
Надо было тут на скорую руку инвентаризацию компов юзверей провести, сделал через AIDA. Теперь нужно распарсить полученные результаты, взял то, что хоть чуть-чуть знаю - начал делать скрипт парсинга на bash. Неделю вылезают ошибки, суть которых мне не понять - вроде синтаксис везде верный! (но нет)

В терминале команды по одной нормально отрабатывают, а в скрипте нет.

Суть проблемы.
Прошу помочь ткнуть, где я накосячил и ошибся, что проглядел. Скрипт получился немного объёмным, залил его с файлом, на котором он тестируется: http://rpulse.tk/rpulsecloud/index.php/s/bMnFC05T1Mi5byu

Известные траблы:.
0. Функция userwithcomputer - самая топорная, блин. Ничего не записывает в текстовые файлы.
1. Функция withcpu - для поиска компов с определённым ЦП. С запуска встречает нас с «Ambiguous redirect» и иже с ней в 47 строке, даже если ввести одно слово, а не несколько.
2. Функция withozu - не работает умножение (о0) и всё дальше на 71 и 72 строке всё сыпется с «Неверным числом строк» и «Ambiguous redirect»

И только выход из скрипта работает корректно...

Бессмысленный крик отчаяния о помощи

В файлы нигде не пишется. Обратные кавычки не нужны при перенаправлении вывода. Вот тут и далее, месиво какое-то

`echo $(cat < $(ls $wdir | grep ".txt" | head -n $iterator | tail -n1) | grep "Компьютер" | head -n1)` >> user-computer.report

UPD. В общем лишнего много. Надо как-то так
ls $wdir | grep ".txt" | head -n $iterator | tail -n 1 | grep "Компьютер" | head -n 1 >> user-computer.report

Deleted ()
Последнее исправление: medossa (всего исправлений: 1)
Ответ на: комментарий от devilinside

Отладчиком надо глянуть где косяк: bash -x script.sh
Вот глянул мельком, цикл не по-башевски

for iterator in ls $wdir
Надо
for i in "$(ls $wdir)"
и т.д. Отладчик всё покажет.

Deleted ()

General part где три варианта вызова mainmenu можно заменить на:

echo "Введите полный путь до рабочей директории:"
read wdir
if [ -d "${wdir:-`pwd`}" ]; then
	mainmenu
fi

Так как проверка на то файл это или нет никогда не произойдет в оригинальном коде.

nerve ★★ ()
Ответ на: комментарий от nerve

Опций там навалом конечно, посмотрел. autocd, cdspell и много другого интересного)

Deleted ()

по хорошему тебе надо бы прошерстить это говно перлом и запулить в sqlite
Из говна и палок относительно быстро можно сделать. И мудохаться потом с выборокой проще составляя sql запрос просто.
Это я к тому, что за неделю ты бы руками эту базу заколотил бы уже, а не пытаясь осилить дзен буккакинга дебаггинга.

TomBOY ★★ ()

А по сути есть пара замечаний.
Не пытайся засунуть всё в однострочник, т.к. это удел тех, у кого синтаксический анализатор в голове встроен. Отражается это на геморройной отладке, которую ты наблюдаешь.
Вместо grep можно использовать AWK, им удобнее результаты промежуточные выдергивать, соответственно с pipe-ми меньше возни.

TomBOY ★★ ()
Ответ на: комментарий от Deleted

Можно оперировать файлами по номерам инодов.

ls -ia

TomBOY ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.