The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
помогите найти ошибку, !*! varvara_88, 10-Май-11, 19:49  [смотреть все]
Второй год не могу сдать лабораторку по UNIX "написать пр-му выдающую список пользователей, имеющих право записи в данный файл.

#!/bin/bash
if str=`ls -l -- "$1"` 2>/dev/null
then
{
u=`echo $str | cut -c 3`  
g=`echo $str | cut -c 6`
o=`echo $str | cut -c 9`
username=`echo $str | nawk '{print $3}'`
groupname=`echo $str | nawk '{print $4}'`
gid=`cat /etc/group | nawk -F: '$1=="'$groupname'" {print $3}'`
uid=`id -u "$username"`

#Функция вывода имен пользователей группы, кроме владельца файла
print_users_of_group()
{
{ #Вывод имен пользователей, для которых данная группа является вторичной
#niscat group.org_dir
cat /etc/group
} | nawk -F: '$1=="'$groupname'" {print $NF}' | nawk -F, '{for(i=1; i<=NF; i++) { if ($i!="'$username'") {print $i}}}'
{ #Вывод имен пользователей, для которых данная группа является первичной
#niscat passwd.org_dir
cat /etc/passwd
} | nawk -F: '$4=="'$gid'" && $1!="'$username'" {print $1}'
}

{
if [ "$u" = "w" ]
then
echo $username #Вывод имени владельца-пользователя
fi

if [ "$g" = "w" ]
then
print_users_of_group
fi

if [ "$o" = "w" ]
then
{
print_users_of_group

echo $username
{
#niscat passwd.org_dir
cat /etc/passwd
} | nawk -F: '{print $1}';

} | sort | uniq -u #Удаляет все повторяющиеся сторки (для удаления имени владельца и имен пользователей группы-владельца из всего списка)
fi


} | sort | uniq
} else echo "error"
fi

  • помогите найти ошибку, !*! phpcoder, 20:42 , 10-Май-11 (1)
    А в чем ваш вопрос? Что не так? Какие результаты ожидаете и какие получили?
  • помогите найти ошибку, !*! sany, 21:47 , 10-Май-11 (2)
    иногда лучше переписать, чем искать ошибку,
    вот мой вариант скрипта, работает и для каталогов:

    perm=$(stat -c %A $1)
    {
        [[ $perm =~ ^..w.......$ ]] && stat -c %U $1;
        [[ $perm =~ ^.....w....$ ]] && grep $(stat -c %G $1) /etc/group | cut -d : -f 4 | grep -v "^$" | sed 's/,/ /g'
        [[ $perm =~ ^........w.$ ]] && cut -d : -f 1 /etc/passwd;
    } | sort | uniq

    • помогите найти ошибку, !*! varvara_88, 22:49 , 10-Май-11 (3)
      >[оверквотинг удален]
      > perm=$(stat -c %A $1)
      > {
      >     [[ $perm =~ ^..w.......$ ]] && stat -c
      > %U $1;
      >     [[ $perm =~ ^.....w....$ ]] && grep $(stat
      > -c %G $1) /etc/group | cut -d : -f 4 |
      > grep -v "^$" | sed 's/,/ /g'
      >     [[ $perm =~ ^........w.$ ]] && cut -d
      > : -f 1 /etc/passwd;
      > } | sort | uniq

      спасибо огромное

      • помогите найти ошибку, !*! sany, 18:56 , 12-Май-11 (4)
        > спасибо огромное

        на будущее: выражения типа "[[ $perm =~ ^..w.......$ ]]" это "башизм", то есть то, что характерно для оболочки bash и может не поддерживаться в других шеллах.
        для совместимости можно вместо него использовать выражение:
        (echo $perm | grep -q ^..w.......$)
        вот вариант скрипта без башизмов:

        perm=$(stat -c %A $1)
        {
          (echo $perm | grep -q ^..w.......$) && stat -c %U $1;
          (echo $perm | grep -q ^.....w....$) && grep $(stat -c %G $1) /etc/group | cut -d : -f 4 | grep -v "^$" | sed 's/,/ /g'
          (echo $perm | grep -q ^........w.$) && cut -d : -f 1 /etc/passwd;
        } | sort | uniq




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру