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


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Скриптописательство  (Прочитано 1380 раз)

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

Оффлайн Сергеев_ЕВ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
    • Официальный сайт МКОУ СОШ №4 г.Миньяра
Скриптописательство
« : 03 Октябрь 2011, 13:30:16 »
Конечно, первоисточник - это всегда самое лучшее решение. Я имею в виду маны. Но когда есть идеи, а направления в поиске их решения нет, хорошим толчком, имхо, может послужить добрый совет.

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

В-общем, начну, пожалуй, с описания задачи. Есть сеть, в ней сервер на убунте 10.10. На нем заведены пользователи, через вебмина "норамльно расшарил" сетевые ресурсы из /home.

Теперь сложность. До этого в сети был виндовый сервер, в котором расшарена для чтения папка, например, Public, ну а в ней папки пользователей. Каждая папка имеет два каталога - Для всех и Мои документы, разумеется, с разными разрешениями на доступ.

Теперь, когда винда приказала долго жить, пытаюсь выстроить подобную архитектуру на линуксе, и даже уже кое-что получилось:
1. В /home завел папку Public
2. В Public завел каталоги по фамилиям пользователей
3. В каталогах пользователей завел по две папки Мои документы и Для всех
4. Разделил права 755 на общие папки и 700 на личные, прописал владельцев
5. Смонтировал личные папки: mount -o bind /home/ivanoff /home/Public/Иванов/"Мои документы"

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

Знаю, что такое возможно. С программированием знаком не понаслышке: Pascal, VBA, JavaScript, немного php - все это для меня знакомо. Подскажите, плииз, где и что покурить, ну и, если можно, пример цикла с поэлементным чтением в массив из файла.

izamoo

  • Гость
Re: Скриптописательство
« Ответ #1 : 03 Октябрь 2011, 14:03:25 »
Цитировать
Подскажите, плииз, где и что покурить

Без обид, просто написано ХОРОШО!!! :2funny: :2funny: :2funny:

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скриптописательство
« Ответ #2 : 03 Октябрь 2011, 14:14:10 »
учите BASH
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скриптописательство
« Ответ #3 : 03 Октябрь 2011, 15:13:06 »

Оффлайн Сергеев_ЕВ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
    • Официальный сайт МКОУ СОШ №4 г.Миньяра
Re: Скриптописательство
« Ответ #4 : 03 Октябрь 2011, 23:38:49 »
Господа! Ради Бога, не давайте советов типа "учите то-то"! Это точно не делает Вас круче, а вопрошателю от этого не легче. Такого рода советы абсолютно неконструктивны, неконкретны и неполезны. Так что, плииз, давайте как-нибудь либо что-то конкретное, либо ничего. Ok?

За ссылку спасибо, но там все по буржуевски, а я с ним не шибко-то...

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3144
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Re: Скриптописательство
« Ответ #5 : 03 Октябрь 2011, 23:46:19 »
Вы хотите что бы программа сама написалась?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скриптописательство
« Ответ #6 : 04 Октябрь 2011, 00:10:54 »
За ссылку спасибо, но там все по буржуевски, а я с ним не шибко-то...
Немного более ранняя версия этого замечательного руководства доступна также на русском, и вы без труда сможете найти её.

Оффлайн Сергеев_ЕВ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
    • Официальный сайт МКОУ СОШ №4 г.Миньяра
Re: Скриптописательство
« Ответ #7 : 04 Октябрь 2011, 14:51:44 »
Вы хотите что бы программа сама написалась?
А что, и так бывает? Нет, конечно, не хочу.

В-общем, сам синтаксис команд интересует, в частности ветвления и циклы, ну и чтение из файлов. Слышал, что баш - си-подобный, т.е. для запуска перебора значений нужно ввести что-то типа: for(i=0;i<=15;i++){
сами, собственно, команды - тело цикла
}
Ну а условия:if(x!=y){
первая ветка команд, по истине
}
else {
вторая ветка команд, по лжи
}

Это - только мои предположения, не уверен, что они хоть сколько-нибудь имеют право на существование, потому и постучался сюда

Оффлайн andrew_bye

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2698
    • Просмотр профиля
Re: Скриптописательство
« Ответ #8 : 04 Октябрь 2011, 15:09:44 »
Это - только мои предположения, не уверен, что они хоть сколько-нибудь имеют право на существование, потому и постучался сюда

Ну, да, гораздо тяжелее набрать в гугле "+bash ветвления и циклы" и сразу же получить ссылку на требуемую информацию http://www.opennet.ru/docs/RUS/bash_scripting_guide/c4875.html

Оффлайн Сергеев_ЕВ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
    • Официальный сайт МКОУ СОШ №4 г.Миньяра
Re: Скриптописательство
« Ответ #9 : 04 Октябрь 2011, 23:40:43 »
получить ссылку на требуемую информацию http://www.opennet.ru/docs/RUS/bash_scripting_guide/c4875.html
Хммм... Действительно, так просто! Спасибо! Ладно, пошел вкуривать...

Оффлайн hippi90

  • Активист
  • *
  • Сообщений: 433
    • Просмотр профиля
Re: Скриптописательство
« Ответ #10 : 05 Октябрь 2011, 01:51:22 »
Могу еще предложить почитать Гифт, Джонс - Python в системном администрировании. Для написания больших скриптов, имхо, питон более подходящий инструмент.

Оффлайн Alie Alexandross

  • Старожил
  • *
  • Сообщений: 1576
    • Просмотр профиля
Re: Скриптописательство
« Ответ #11 : 05 Октябрь 2011, 17:27:15 »
У вас в описании неточность: в пункте 3 папки создаются в Public/user или /home/user?
alie@0_o:~ cat names
###LOGIN---GROUP---SURNAME

alie@0_o:~ cat script
#!/bin/bash

_USERS=$(cat names | awk '{print $1}')

for _UID in $_USERS
do
        if [[ -d "/home/$_UID/DOCS" && -d "/home/$_UID/SHR" ]];
        then
                exit
        else
                _SURNAME=$(cat names | grep $_UID | awk '{print $3}')

                mkdir /home/Public/$_SURNAME/{DOC,SHR}
#               chown $_UID:$_GROUP /home/$_UID/SHR
#               chown $_UID:$_UID /home/$_UID/DOC
#               mount -o bind /home/$_UID /home/Public/`$_SURNAME`/DOCS
        fi
done
В данной ситуации - скрипт написан так, как его понимаю я. Смело модифицируйте.
Переменная $_GROUP подразумевает общую групу для всех пользователей списка и создана для предоставления общего доступа. В случае DOC група указывается пользовательская, оная создаётся по умолчанию.
« Последнее редактирование: 05 Октябрь 2011, 17:32:14 от Alie Alexandross »
Подпись автора jillsmitt истинна...

Оффлайн Сергеев_ЕВ

  • Автор темы
  • Новичок
  • *
  • Сообщений: 43
    • Просмотр профиля
    • Официальный сайт МКОУ СОШ №4 г.Миньяра
Re: Скриптописательство
« Ответ #12 : 05 Октябрь 2011, 17:57:26 »
О, наконец-то, нормальные посты начали появляться! Спасибо hippi90 и Alie Alexandross! Пока не знаю, как это все переварить, но то, что Ваши посты полезны - однозначно!
У вас в описании неточность: в пункте 3 папки создаются в Public/user или /home/user?
Папки создаются в /home/Public:
--------------------------------------------
/home/Public/Иванов/Мои документы
/home/Public/Иванов/Для всех

/home/Public/Петрова/Мои документы
/home/Public/Петрова/Для всех
--------------------------------------------
ну и т.д.

Оффлайн ArcFi

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: Скриптописательство
« Ответ #13 : 05 Октябрь 2011, 18:37:52 »
(Нажмите, чтобы показать/скрыть)

Оффлайн Alie Alexandross

  • Старожил
  • *
  • Сообщений: 1576
    • Просмотр профиля
Re: Скриптописательство
« Ответ #14 : 05 Октябрь 2011, 19:31:11 »
Цитировать
Папки создаются в /home/Public:
Раз так, тогда так:
#!/bin/bash

_USERS=$(cat names | awk '{print $1}') # Тут перечислили первый столбец базы с именами пользователей

for _UID in $_USERS # Тут под каждого пользователя из перечисленных запустили обработчик
do
        _SURNAME=$(cat names | grep $_UID | awk '{print $3}') # Получили третий столбец из списка для проверки наличия пользовательской папки по фамилии

        if [[ -d "/home/Public/$_SURNAME/DOCS" && -d "/home/$_SURNAME/SHR" ]]; # Если папки существуют...
        then
                exit # Завершили скрипт
        else  # Если нет

                mkdir /home/Public/$_SURNAME/{DOC,SHR} # Создали папку по фамилии пользователя и дочерние папки
#               chown $_UID:$_GROUP /home/$_UID/SHR # Наделили правом доступа всех пользователей из групы
#               chown $_UID:$_UID /home/$_UID/DOC # Ограничили права только личным доступом
#               mount -o bind /home/$_UID /home/Public/`$_SURNAME`/DOCS # примонтировали
        fi
done

# ...И так под каждое имя из списка


P.S. Касательно "нормальных постов" - вы погорячились. Я полностью поддерживаю arcfi: лучше потратить на освоение синтаксиса пару часов и потом писать "под себя" . За сим самый толковый пост в этой теме - четвёртый сверху.
Подпись автора jillsmitt истинна...

 

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