Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите написать shell-процедуру

38K
29 мая 2008 года
Panchos111
5 / / 29.05.2008
Помогите написать shell процедуру.
Надо для каждого пользователя вывести сообщение

Код:
echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a`  #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
        echo "date $P"
done


У меня получается: выводится сообщение для первого пользователя, а для остальных только их логин.
36K
30 мая 2008 года
Trilobit
6 / / 21.02.2008
Буэнос ночес, Панчос!

Я не совсем понял, что делает твой скрипт, но попробуй поставить вместо
 
Код:
echo "date $P"


 
Код:
echo "date [$p]"


И скорее всего получится
 
Код:
date [user1
user2
user3]


Можно попробовать сделать так:
Код:
:

echo -n "Введите группу: "
read a
case "$a" in
[0-9]*);;
*) gid=$(grep "^$a:" /etc/group | cut -f3 -d:)
    if [ -z "$gid" ]; then
        echo "Нет такой группы '$a'" 1>&2
        exit 1
    fi
    a=$gid
    ;;
esac

if [ "$a" != "" ];
then
#       for i in $(awk -v group="$a" 'BEGIN{ FS=":"; } { if ($4==group) {print $1;} }' < /etc/passwd); do
#               echo "date $i"
#       done
        IFS=":"
        while read user passwd uid gid gecos home shell
        do
                [ "$gid" = "$a" ] || continue
                echo "user=$user uid=$uid gid=$gid gecos=$gecos home=$home shell=$shell"
        done < /etc/passwd
fi


В качестве бонуса можно вводить и номер группы, и имя группы.
38K
30 мая 2008 года
Panchos111
5 / / 29.05.2008
Код:
echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a`  #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
        echo "date $P"
done


Должно получиться так:
date "user1"
date "user2"
date "user3"
date "user4"
и т. д.

у меня получается щас так:
date "user1"
user2
user3
user4
и т. д.
2
30 мая 2008 года
squirL
5.6K / / 13.08.2003
Цитата: Panchos111

Код:
echo "vvedite gruppu: "
read a
if [ "$a" != " " ]; #Если парметр а не пуст
then
V=` cat /etc/passwd | grep $a`  #ищем в каталоге /etc/passwd нашу #группу и записываем в V
echo "$V /n" > news #записываем содержимое V в файл news
P= ` cat -f4 -d/ news` #Выбираем 4 поле в файле и записываем в #переменную Р
for i in $* #пробегаемся по всем пользователям и выводим для каждого #сообщение "date $P"
do
        echo "date $P"
done


у вас вообще очень странный код. во-первых какую ГРУППУ вы ищите в /etc/passwd? второе - зачем нужен промежуточный файл news?
третье - что это за поле вы выбираете по разделителю /?
в четвертых - что у вас лежит в $*?

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

Цитата:
date "user1"
date "user2"
date "user3"
date "user4"


достаточно сделать:
[highlight=bash]
for USER in `cat /etc/passwd | cut -f1 -d:`
do
echo "date ${USER}"
done
[/highlight]

38K
31 мая 2008 года
Panchos111
5 / / 29.05.2008
Есть ли в shell команды которые вырезают или удаляут символы в параметре? Типа len или mid. Приведите пож пример
2
02 июня 2008 года
squirL
5.6K / / 13.08.2003
не очень понял, что вы имеете ввиду. вообще резать ненужное можно при помощи sed, либо tr:
[highlight=bash]
echo abc | sed s/a/1/
1bc
[/highlight]
[highlight=bash]
echo "abcdf3rsdfasdf3fsafd123100abc" | tr -d [:digit:]
abcdfrsdfasdffsafdabc
[/highlight]
смысл я думаю ясен, остальное см. в соответствующих man pages
38K
03 июня 2008 года
Panchos111
5 / / 29.05.2008
Спасибо, разобрался))))
83K
14 мая 2012 года
Lutusik
1 / / 14.05.2012
Здравствуйте, помоги те пожалуйста написать shell-процедуру, которая выполняет действия:
вычисляет значение арифметического выражения, заданного первыми пятью
параметрами;
сравнивает полученное значение с числом, заданным вторым параметром;
при совпадении результатов сравнения выводит на экран заданное выражение и его
значение.

естественно не за спасибо)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог