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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Автоматизация ввода пароля в скрипте bash..  (Прочитано 12458 раз)

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

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Например, стоит задача, автоматизировать установку пакета x11vnc и настройку конфигурационных файлов.
 Но весь процесс может остановить команда


x11vnc -storepassword ~/.vnc/passswd


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

1. Можно ли написать простую проверку на наличие католога ~/.vnc

например


var dir ='~/.vnc'; # объявляем переменную


if (dir = true){                                               
            echo 'Каталог `"~/.vnc"` каталог уже присутсвует
            }
else {
       mkdir ~/.vnc
     }

#/... далее продолжается выполнение кода


2. Автоматизировать ввод пароля (ввод заранее написанного пароля автоматически в строку запроса 2 раза), и на запрос системы  нужно ли записать данный пароль
, ответить утвердительно - yes.

напишете пожалуйста, как это пишется в языке bash, начало и конец скрипта.
 Можно ли в переменную установить выражение.
Поясните пожалуйста ваш скрипт.

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #1 : 19 Апреля 2017, 19:56:43 »
dir=~/.vnc
[ -d "$dir" ] || mkdir "$dir"

как это пишется в языке bash
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #2 : 19 Апреля 2017, 20:19:10 »
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

признателен вам за ссылку, со временем попытаюсь изучить

.. если кто может подскажите конкретно по моим вопросам (на изучение всего уйдет уйма времени, а нужно сделать все быстро, простите...)
 Хотя бы кратко поясните

Мое понимание

[ -d "$dir" ] - читается значение переменной

 || - это оператор ИЛИ  - ?

 mkdir "$dir" - выполняется создание катлога, по пути, указанном в переменной

Какая здесь связь ???

То есть в вашем языке, условие которое я написал выше укладывается в одну строку ???
И так в Bash происходит проверка выполнения условия и выполнения или не выполнение или не выполнение 2-й части кода в зависимости от истинности условия ???
« Последнее редактирование: 19 Апреля 2017, 20:26:42 от alex-sky »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #3 : 19 Апреля 2017, 20:23:38 »
[ ] - это test. Читай: man test

|| - это оператор ИЛИ  - ?
Да

mkdir "$dir" - выполняется создание атлога, по пути, указанном в переменной
Да

Если нужно с if..else , то так:
if [ -d "$dir" ]
then
    код...
else
    код...
fi



Пользователь добавил сообщение 19 Апреля 2017, 20:51:44:
условие которое я написал выше укладывается в одну строку ???
И так в Bash происходит проверка выполнения условия и выполнения или не выполнение или не выполнение 2-й части кода в зависимости от истинности условия ???
Да в одну строку и в зависимости от истинности условия.
« Последнее редактирование: 19 Апреля 2017, 20:51:44 от renzrv »

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #4 : 19 Апреля 2017, 20:51:54 »
Цитировать
условие, находящееся внутри квадратных скобок может быть проверено без использования оператора if.

Цитировать
cуществует специальная команда -- [ (левая квадратная скобка). Она является синонимом команды test, и является встроенной командой (т.е. более эффективной, в смысле производительности). Эта команда воспринимает свои аргументы как выражение сравнения или как файловую проверку и возвращает код завершения в соответствии с результатами проверки (0 -- истина, 1 -- ложь).


Цитировать
[ ] -   диапазон символов.

    В регулярных выражениях, в квадратных скобках задается диапазон искомых символов.


Цитировать


test.

Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test ...

Таким образом

[b][ -d "$dir" ][/b]

[] - проверка истинности условия
-d - [ -d “путь к каталогу”] – существует ли каталог.

Кстати, на скорую руку не нашел, где написано , что ключ -d - это логический оператор, применяемый в конструкции if-then-else

dir=~/.vnc - объявили переменную, и далее переменная при вызове обозначается уже так "$dir", а зачем кавычки ???
« Последнее редактирование: 19 Апреля 2017, 21:20:09 от alex-sky »

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #5 : 19 Апреля 2017, 21:01:37 »
Таким образом
Что за... :idiot2: я же тебе написал. Вставь в тестовый скрипт или в терминал:
dir=~/.vnc ; [ -d "$dir" ] ; echo $?(0 - true, не 0 - false) и проверь если не веришь.

где написано , что ключ -d - это логический оператор
-d - это опция(ключ) команды test, и к if-then-else отношения не имеет.

Пользователь добавил сообщение 19 Апреля 2017, 21:05:05:
А ковычки нужны если в пути или имени будет пробел.
« Последнее редактирование: 19 Апреля 2017, 21:05:05 от renzrv »

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #6 : 19 Апреля 2017, 21:35:40 »
Что за... :idiot2: я же тебе написал
..без этого пожалуйста.
 я просто пытаюсь для себя разобраться

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #7 : 19 Апреля 2017, 21:43:58 »
я просто пытаюсь для себя разобраться
[ ] - это test. Читай: man test
help [
help test
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #8 : 19 Апреля 2017, 22:04:09 »
help [
help test

да спасибо, help test - там говорится про оператор -d, теперь понятно
Так как [ (левая квадратная скобка). Она является синонимом команды test и является ее частью, поэтому операторы для команды test справедливы и для [

Но вот это поясните

Цитировать
but the last argument must
    be a literal `]', to match the opening `['.

..но последний аргумент должен быть литералом, для соответствия открытой команде `['


Литерал ] - в данном случае - это строковое значение ?
Для чего ?
Какова его функция?

Это что-то вроде точки, указывающей окончание данной команды ?
« Последнее редактирование: 19 Апреля 2017, 22:11:27 от alex-sky »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #9 : 19 Апреля 2017, 23:54:01 »
Такой формат команды (скобка должна быть закрыта). Не хотите «закрывать» — используйте test. Никакой дополнительной функции она не несет.
Окончание команды — перевод_строки и/или в некоторых случаях «;»
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #10 : 20 Апреля 2017, 09:43:16 »
Спасибо с 1-й частью разобрался.
А что по поводу автоматизации ввода пароля ???

Пока нашел вот это, буду пробовать

sudo apt-get install expect

https://ru.wikipedia.org/wiki/Expect

если кто знаком с работой данной утилиты и с языком TCL, просьба напишите...
« Последнее редактирование: 20 Апреля 2017, 09:59:54 от alex-sky »

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #11 : 20 Апреля 2017, 10:03:10 »
alex-sky, Проблема в том, что Вы делаете что-то «не как положено»: в каждой системе/языке существует наработанная стандартная процедура выполнения какой-то распространенной задачи. Но для того, чтобы Вам её предложить нужно в подробностях узнать что конкретно Вы делаете.
Если брать в общем случае, то для чтения ввода пользователя используется read. Если требуется интерактивная коммуникация с программой, с которой не получается стандартными методами провести обмен информацией — expect со своими TCL-процедурами.
пытаюсь для себя разобраться
Для этого существуют учебники, руководства и справочная литература, Вам уже порекомендовали
как это пишется в языке bash
http://www.opennet.ru/docs/RUS/bash_scripting_guide/
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн alex-sky

  • Автор темы
  • Участник
  • *
  • Сообщений: 189
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #12 : 20 Апреля 2017, 22:07:52 »
Вот скрипт

Вначале я сделал файл исполняемым

sudo chmod +x ~/!_scripts/test.sh

Запускал так

sh ~/!_scripts/test.sh

(Нажмите, чтобы показать/скрыть)

Но ничего не отработало ???

(Нажмите, чтобы показать/скрыть)

Помогите пожайлуста разобраться почему не работает ...

Оффлайн ReNzRv

  • Старожил
  • *
  • Сообщений: 2648
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #13 : 20 Апреля 2017, 22:14:49 »
Запускать нужно без указания интерпритатора (sh), т.к он указан в шабанге (первая строка).

Оффлайн Azure

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
Re: Автоматизация ввода пароля в скрипте bash..
« Ответ #14 : 20 Апреля 2017, 23:07:55 »
А сам expect установлен?
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

 

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