1

Господа Линуксники, нужна ваша помощь!

Задача:
Написать скрипт, что бы при запуске мог проверить пользователь в "сети" (залогинился) или нет.
Если пользователь в сети, програмка издает БИП и выдает, что пользователь в сети. // конец скрипта
Если пользователь не в сети, скрипт выдает, что пользоваетль не в сети и ожидает еще одной проверки 60 секунд.
После 60-ти секунд снова проверяет и если не в сети выдает, что он (пользователь) не в сети и выдает надпись. Если в сети выдает тоже надпись. // конец скрипта.

Скрипт написал, что то то идет на перекосяк.

Выдаю скрипт:

#!/bin/sh
#
# My Script
#
clear
echo "......................................................."
echo "                 To check user in online               "
echo "......................................................."
echo " "

my_time=60
deftime=5

if [ $? -eq 0 ]

then
who | grep  $1
echo "\a User $1 login in this system"

else
if [ $# -eq 2 ] && [ $2 != q ]

then
who | grep -w $1 
sleep $my_time

echo "User $1 logged in frequency $my_time seconds"
else

if [ $# -eq 3 ] && [ $3 = q ]
then
sleep $my_time
who | grep -w $1

else

if [ $2 = q ]
then
who | grep -l $1
sleep $deftime

else
echo "User $1 do not logged in system"

exit 1
fi
fi
fi
fi

Скриншоты скачайте сами, делаю все в Линуксе, фалообменики не понимают формат (((((( .xcf
1 - Задаю проверить себя, все отлично!
http://clip2net.com/s/2xOeV

2 - Задаю проверить мифического человека:
Выдают что пользователь в СЕТИ! Но несколько в ином варианте.
http://clip2net.com/s/2xOeU

Подправьте код, плиз!!
Благодарю за скорые и толковые правки.
.................................................................................................................
Админы, и модераторы - если тема не в том разделе - перенесите, я тут впервые.

2

varvar777 пишет:

Скриншоты скачайте сами, делаю все в Линуксе, фалообменики не понимают формат (((((( .xcf

Зато Gimp умеет сохранять файлы в том числе и в jpeg и png, да и делать скриншоты в нём как-то излишне брутально bx
P.S. А вывод скрипта (текст) можно и показать, как обычный текст.

Был, был и весь вышел...

3 (27.11.2012 09:37:20 отредактировано Vascom)

У тебя строка "echo "\a User $1 login in this system"" срабатывает всегда вне зависимости от результата работы предыдущей команды "who | grep  $1".
Сделай нечто вроде этого:

in_net=`who | grep  $1 -c`
if [ "$in_net" -ne 0 ]
then
    echo "\a User $1 login in this system"
else
    echo "\a User $1 not login in this system"
fi

P.S. Расставь отступы для всех if/else, чтобы понятнее было.

4

Спасибо за ответы!! Ломаю голову второй день.
Задача немного усложнилась.
Vascom - спасибо за подсказку, но не все так просто...

1 - Система проверяет, пользователь в сети или нет.
- если в сети выдает надпись - "в сети" - конец программы

- если пользователь не найден, программа проверяет правильность написания, имя пользователя ОДНО слово. Если через пробел есть Буква или Цифра - система сообщает - Проверьте правильность написания имени - конец программы

- или если пользователь не найдет - то система ожидает (в моем случае сейчас в скрипте 10 сек) и выдает что "Пользователь в течении 10 секунд не залогинился" ожидает еще 5 сек и выдает - Пользователь такой то не в систаме. - конец программы

Все что надо. У меня сейчас такой скрипт.

#!/bin/sh
#
# My Script
#
clear
echo "......................................................."
echo "                 To check user in online               "
echo "......................................................."
echo " "

my_time=10
deftime=5

#if [ "$?" -eq 0 ]

in_net=`who | grep  "$1" -c`
if [ "$in_net" -ne 0 ]

then
    echo "\a\n User "$1" login in this system"
    else

if [ "$2" != q ] && [ "$2" != [0-9] ]

    echo "Please, check the name and type correct..."

then

who | grep -w "$1"

    echo "User $1 not logged in  $my_time seconds"
else

if [ "$#" -eq 3 ] && [ "$3" = q ]
then
sleep "$my_time"
who | grep -w "$1"

else

if [ "$2" = q ]
then
who | grep -l "$1"
sleep $deftime

else
echo "User $1 do not logged in system"

exit 1
fi
fi
fi
fi

Проверяю себя: - ОТЛИЧНО!
.......................................................
                 To check user in online               
.......................................................

User vladimir login in this system
vladimir@ubuntu:~$

Проверяю garry: - Пользователь не проходит валибность имени
.......................................................
                 To check user in online               
.......................................................
Please, check the name and type correct...
User garry not logged in  10 seconds
vladimir@ubuntu:~$

Хотя просто должно выдать пользователь:
- Пользователь в течении 10-ти сек в сеть не входил
- Пользователь не в сети.

Проверяю garry 8 - garry k:
.......................................................
                 To check user in online               
.......................................................

Please, check the name and type correct...
User garry not logged in  10 seconds
vladimir@ubuntu:~$

Тоже самое!!!!!

Голова кругом (((((((( помоги выправить код. Он по ходу нормально написан, только с ошибками, или недочетами с "не довведенными" командами....

5

Вот. Всё ведь просто и понятно, когда отступы стоят.

#!/bin/bash
#
# My Script
#

my_time=10
deftime=5
good_msg="User "$1" login in this system"

echo "......................................................."
echo "                 To check user online                  "
echo "......................................................."
echo

#Check input parameters
if [ "$#" -ne 1 ]
then
    echo "Please, type only one name without spaces..."
    exit
fi

#Main check
in_net=`who | grep  "$1" -c`
if [ "$in_net" -ne 0 ]
then
    echo "$good_msg"
else
    one_word=`echo "$1" | grep " " -c`
    if [ "$one_word" -ne 0 ]
    then
        echo "Please, check the name and type correct..."
    else
        sleep $my_time
        in_net=`who | grep  "$1" -c`
        if [ "$in_net" -ne 0 ]
        then
            echo "$good_msg"
        else
            sleep $deftime
            in_net=`who | grep  "$1" -c`
            if [ "$in_net" -ne 0 ]
            then
                echo "$good_msg"
            else
                echo "User $1 do not logged in system"
            fi
        fi
    fi
fi

6

Я не могу поверить глазам!!!!
Все работает!!!!!

Спасибо, это не просто помощь "пожилому студенту" - ты по новой показал как строить код.

Блин, ну почему препод не подсказал, что как в "С" проще делать все отступы, что бы нагляднее и ничего не потерять! Спасибо за науку!!!