Дообавить проверку по условию (bash)

Как правильно задавать вопросы Правильно сформулированный вопрос и его грамотное оформление способствует высокой вероятности получения достаточно содержательного и по существу ответа. Общая рекомендация по составлению тем: 1. Для начала воспользуйтесь поиском форума. 2. Укажите версию ОС вместе с разрядностью. Пример: LM 19.3 x64, LM Sarah x32 3. DE. Если вопрос касается двух, то через запятую. (xfce, KDE, cinnamon, mate) 4. Какое железо. (достаточно вывод inxi -Fxz в спойлере (как пользоваться спойлером смотрим здесь)) или же дать ссылку на hw-probe 5. Суть. Желательно с выводом консоли, логами. 6. Скрин. Просьба указывать 2, 3 и 4 независимо от того, имеет ли это отношение к вопросу или нет. Так же не забываем об общих правилах Как пример вот
Аватара пользователя

Автор темы
madesta
Сообщения: 2020
Зарегистрирован: 11 июн 2017, 21:47
Решено: 30
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 434 раза
Контактная информация:

Дообавить проверку по условию (bash)

#1

04 мар 2024, 04:14

Сразу прошу простить за "многа букаф", но короче пояснить не получается :blush: .
Для своих нужд и потребностей своих знакомых пользователей LM класса "не въезжаю" :smile: сделал два скрипта: разрезание и склейка на части. В качестве преамбулы, наличие в комплекте поставки LM GUI утилиты gnome-split к применению не рассматривалось по причине её непонятного у меня автозавершения (самопроизвольное закрытие окна) через несколько секунд после запуска.
Скрипт склейки в результирующий файл из исходных файлов вида x00, x01, x02 и т.д. отрабатывается в терминале через кнопку запуска вида файла .desktop из меню программ. В процессе выполнения запрашивается выполнение операции Да/Нет и ввод имени результирущего файла с расширением.
zapros-1.png
zapros-2.png
Собственно сам вопрос касается выполнения условия введённого имени файла (вторая форма) при сохранении условия проверки результата Да/Нет на выполнение операции (первая форма).
Первоначально предусматрривалось, что при нажатии кнопки "Нет" в первой картинке в имя склеиваемого файла будет вводится значение 0 и впоследствии это будет использовано при выполнении условия if then. К сожалению, ввиду разношёрстности содержания имени склеиваемого файла (или текстовая строка, или значение 0, или отсуствие какого-либо введённого значения) пришось ораничиться тем, что файл, содержащий вводимое имя файла, проверяется только на предмет "пустой файл" или "не пустой файл" (см. if [ -s /tmp/output.txt ]; then), а в первой форме вместо изначально задуманного записываемого значения 0 создаётся пустой файл (первоначальная идея помечена как #). Вследствие этого при пояснении причин завершения процесса без склейки файла отсутствие наличия имени файла ("Отменить" во второй форме) и отказ от выполнения операции ("Нет" в первой форме) были совмещены.
Можно ли каким-то образом это разъединить? То есть, чтобы отдельно выводилась причина отказа от операции и отдельно отсутствие введенного имени имени файла. Если возможно, то без отсылки на yad, так как пока что до его понимания мне далеко (уровень copy/paste).
Сам sh под спойлером (увы, оформить красиво как видел здесь на форуме пока не умею):
#!/bin/bash
echo " "
echo " "
echo " Выберите папку с исходными файлами,"
echo " имена которых начинаются на x..."
echo " "
echo " "
sleep 3
dir=$(zenity --file-selection --directory)
zenity --width=280 --question --title "Имя файла" --text="Укажите полное имя склеиваемого файла,\nвключая его расширение, например:\n\nХудожественный фильм.mkv или\nДокументальная телепередача.mp4\n $task" \
--ok-label="Да" \
--cancel-label="Нет"
answer=$?
if [ "$answer" -eq 0 ]; then
zenity --width=100 --title "Ввод текста" --text "Ввод имени файла с расширением:" --entry > /tmp/output.txt
elif [ "$answer" -eq 1 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
elif [ "$answer" -eq 5 ]; then
# echo "0" > /tmp/output.txt
> /tmp/output.txt
fi
if [ -s /tmp/output.txt ]; then
cd "$dir"
echo " Производится склейка частей"
echo " в файл с указанным именем."
echo " "
echo " По завершении процесса Вы получите"
echo " сообщение в этом же окне."
cat x* > "$dir/$(cat /tmp/output.txt)"
find "$dir" -maxdepth 1 -name 'x*' -exec rm {} \;
echo " "
echo " "
echo " Процесс успешно завершён."
echo " Исходные файлы х... удалены."
echo " "
echo " "
sleep 3
xdg-open "$dir" &
else
echo " Процесс завершён с результатом 0."
echo " Возможные причины:"
echo " "
echo " 1) Вы отказались от операции;"
echo " 2) Вы не указали имя файла."
echo " "
sleep 8
fi
exit

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Дообавить проверку по условию (bash)

#2

04 мар 2024, 07:33

madesta писал(а):
04 мар 2024, 04:14
оформить красиво как видел здесь на форуме пока не умею
Для этого надо изучить тему Панель форматирования текста в темах/ответах

Писать за тебя скрипт не вижу смысла, т.к. ничему не научишься. А вот подсказать в каком направлении двигаться могу.

1. Разбей свой скрипт на отдельные функции и вызывай их там где это необходимо. Т.е. у тебя должны появиться функции такие как склеить, разделить, сохранить. Так же можно добавить функцию, которая будет выводить сообщение о завершении. И в этом сообщение уже будет текст о причинах завершения. В функции как и в скрипт можно передавать параметры.
2. Как только это сделаешь станет понятно где и какую проверку ты хочешь добавить
ИзображениеИзображение

Аватара пользователя

FreeStyler
Сообщения: 798
Зарегистрирован: 23 июл 2018, 07:58
Решено: 6
Откуда: Сиб
Благодарил (а): 756 раз
Поблагодарили: 94 раза
Контактная информация:

Дообавить проверку по условию (bash)

#3

04 мар 2024, 11:31

Сам sh под спойлером (увы, оформить красиво как видел здесь на форуме пока не умею)
изучи ББ-коды в какой-нибудь флудилке :sry:
Это ограничения zenity? Тогда стоит изучить GTK или Qt
deadmau5 - Harmonic Mix
■ KDE Neon 22.04 (UE) @ Lenovo IdeaPad 3-15 Ryzen 5 4500U, 18 Гб DDR-4, 128 Gb SSD +1 Gb SSD 1920x1080

Аватара пользователя

Автор темы
madesta
Сообщения: 2020
Зарегистрирован: 11 июн 2017, 21:47
Решено: 30
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 434 раза
Контактная информация:

Дообавить проверку по условию (bash)

#4

04 мар 2024, 12:02

FreeStyler писал(а):
04 мар 2024, 11:31
изучи ББ-коды в какой-нибудь флудилк
Да как rogoznik сказал, ссылаясь на это сообщение, выделил текст нажал кнопку icode , но при предпросмотре сплошная зелень и такого поля не отображалось. Поэтому и в спойлер засунул. Наверное нужно было не через выделение + кнопка, а сразу в тексте коды ставить :smile:

Аватара пользователя

rogoznik
Сообщения: 10050
Зарегистрирован: 27 июн 2017, 13:36
Решено: 129
Откуда: Нижний Тагил
Благодарил (а): 776 раз
Поблагодарили: 1958 раз
Контактная информация:

Дообавить проверку по условию (bash)

#5

04 мар 2024, 12:12

madesta, это разные bb-code.
[icode][//icode](не обращать внимание на 2 // должен быть 1 ) - это если надо выделить букву/слово/строку, это строковый элемент
[code][/code] - это если надо выделить блок кода с форматированием и кое-какой подсветкой, это блочный элемент

Код: Выделить всё

#!/bin/bash

echo "Это блок кода"
[pre][/pre] - это если надо чтоб текст имел форматирование(отступы)
вот так
    вот так
        вот так
ИзображениеИзображение

Аватара пользователя

Автор темы
madesta
Сообщения: 2020
Зарегистрирован: 11 июн 2017, 21:47
Решено: 30
Откуда: BY
Благодарил (а): 79 раз
Поблагодарили: 434 раза
Контактная информация:

Дообавить проверку по условию (bash)

#6

04 мар 2024, 14:10

Посмотрел на свежую голову и создалось впечатление, что тему формулировал с большого бодуна :hoho:
Если в первой форме я нажимаю "Нет" или щёлкаю по кнопку закрытия окна, то у меня уже создаётся файл, содержащий пустое имя выходного файла, что равносильно "не указывать имя файла". Другими словами, отказываясь от выполнения операции я автоматически не указываю имя файла. Тоже самое произойдёт, если во второй форме я отвечу "Отменить" или щёлкну по кнопку закрытия окна (пустой файл уже присутствует и его содержание не изменяется). Поэтому вместо

Код: Выделить всё

else
echo "     Процесс завершён с результатом 0."
echo "     Возможные причины:"
echo " "
echo "     1) Вы отказались от операции;"
echo "     2) Вы не указали имя файла."
echo " "
sleep 8
fi
можно со спокойной совестью указать просто

Код: Выделить всё

else
echo " "
echo "     Вы не указали имя файла."
echo " "
sleep 5
fi
Не в качестве флуда, но получилось "это по нашему: самому себе на ровном месте создать проблему и затем приложить титанические усилия для её решения". Но зато старческое слабоумие на старости лет, надеюсь, мне пока не грозит – пришлось напрягать извилины, пытаясь вникнyть в Bash-Scripting Guide. :-D
Тему закрываю, потому что добавление проверки по условию это уже лишнее. Всё и так работает как задумано.
P.S. Кого интересует sh разбивки файла на части с формой чекбоксов выбора числа частей, на которые будет разрезаться файл, пишите в ЛС.

Закрыто

Вернуться в «Программирование, скриптинг, виртуализация»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя