URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7818
[ Назад ]

Исходное сообщение
"Скрипт проверки пользователя"

Отправлено tmw , 09-Янв-09 08:36 
Здравствуйте!
Не силён в скриптах на UNIX.
Есть файл user
Его содержание:
---------------------
user=admin
ip=192.168.0.4
---------------------
Он постоянно обновляется.

Нужно написать скрипт, который считывал бы из этого файла имя пользователя и ip адрес.
Потом проверял, если имя пользователя к примеру admin и ip 192.168.0.4, то выполнял бы какоето действие, если не соответсвует, то ни чего не деал. В моём случае надо выполнить такую команду если условие совпадает:
kill -9 `ps -ax | grep "papcuaa0" | awk '{ print }'`
Если нужно изменить синтаксис файла user, поставить гдето символы $, то это можно изменить.
Просто я не знаю синтаксис команд, так бы я сам написал скрипт, принцип я знаю.

Заранее благодарен!!!


Содержание

Сообщения в этом обсуждении
"Скрипт проверки пользователя"
Отправлено Arpo , 09-Янв-09 09:49 
>[оверквотинг удален]
>деал. В моём случае надо выполнить такую команду если условие совпадает:
>
>kill -9 `ps -ax | grep "papcuaa0" | awk '{ print }'`
>
>Если нужно изменить синтаксис файла user, поставить гдето символы $, то это
>можно изменить.
>Просто я не знаю синтаксис команд, так бы я сам написал скрипт,
>принцип я знаю.
>
>Заранее благодарен!!!

Если возможно изменить синтаксис фаила, то тут делать нечего.

Например если будет так
user.list
--------------
admin,192.168.0.4
vasya,192.168.0.15
kolya,192.168.0.55
...
admin,192.168.0.4
-------------------

то можно написать так

script.sh
---------
#!/bin/sh

cat user.list|while read LINE
do
       UR=`echo $LINE|awk -F, '{print $1}'`
       IP=`echo $LINE|awk -F, '{print $2}'`
       if [ $UR = "admin" ] && [ $IP = "192.168.0.4" ]
       then
             echo "URA"  #здесь любая комманда которую нужно выполнить
       fi
done

Это первое что приходит в голову, но я думаю эту задачу можно решить даже каким нить перловым однострочником.


"Скрипт проверки пользователя"
Отправлено phpcoder , 09-Янв-09 21:07 
[...]
>Если возможно изменить синтаксис фаила, то тут делать нечего.

Не надо менять синтаксис файла! KISS. Нужно просто за'source'ить этот файл в скрипт и пользоваться переменными $user и $ip как душе вашей будет угодно.


"ужос! враги  --  круоооом! B-]"
Отправлено Andrey Mitrofanov , 09-Янв-09 23:09 
>синтаксис файла! KISS. Нужно просто за'source'ить этот файл в скрипт

Не. Секурно. Ма-а-аксимум:

#!/bin/bash

eval `egrep '^(user=[a-z]+|ip=[0-9.]+)$' <./user `

echo "!$user -- $ip -- $wsk!"

...а вот так не работает... почему?...

#!/bin/bash

. <( egrep '^(user=[a-z]+|ip=[0-9.]+)$' <./user )

echo "!$user -- $ip -- $wsk!"

............................
$cat ./user
ip=1.1.1.1
user=admin
wsk=mammamia
$ ./in-source001
!admin -- 1.1.1.1 -- !
$ ./in-source002
! --  -- !
$ _


"Скрипт проверки пользователя"
Отправлено Chainik , 09-Янв-09 12:20 
А если в исходном файле разделителями пробелы или табуляцию использовать, то еще проще
> admin.lict

admin 192.168.0.4
masha    192.168.7.1

cat user.list | while read UR IP; do
       [ $UR = "admin" ] && [ $IP = "192.168.0.4" ] || continue
       echo "URA"  #здесь любая комманда которую нужно выполнить
done


"Скрипт проверки пользователя"
Отправлено tmw , 09-Янв-09 13:05 
Спасибо! Работает, но не совсем.
Скрипт сделал, вручную запускаю всё нормально, работает.
Но когда он запускается по вызову, то ни чего не происходит. Я думаю, что надо запускать с правами root.
Как запустить скрипт с правами root?
Заранее благодарен!!!

"Скрипт проверки пользователя"
Отправлено Arpo , 09-Янв-09 13:09 
>Спасибо! Работает, но не совсем.
>Скрипт сделал, вручную запускаю всё нормально, работает.
>Но когда он запускается по вызову, то ни чего не происходит. Я
>думаю, что надо запускать с правами root.
>Как запустить скрипт с правами root?
>Заранее благодарен!!!

Что есть по вызову? Из Cron-а ???


"Скрипт проверки пользователя"
Отправлено Andrey Mitrofanov , 09-Янв-09 13:08 
>Здравствуйте!
>Не силён в скриптах на UNIX.

Читайте man bash (или любой другой/подходящий/предпочитаемый шел), ABS http:/docs/RUS/bash_scripting_guide/ , изучайте... эээ... принципы "unix shell IPC", инструментарий coreutils/grep/awk/sed. Если "очень надо".

Ж) http:/search.shtml?words=bash_scripting_guide&sort=score&exc...

Может быть, даже perl.

>Есть файл user
>---------------------
>user=admin
>ip=192.168.0.4
>---------------------
>Если нужно изменить синтаксис файла user

if gawk </path/to/user.file -v FS='=' '$1=="user"{u=$2}$1=="ip"{i=$2}u&&i{exit}
END{exit ( u=="admin"&&i=="192.168.0.4" ? 0 : 1)}'; then

> kill -9 `ps -ax | grep "papcuaa0" | awk '{ print }'`

fi


"Скрипт проверки пользователя"
Отправлено tmw , 10-Янв-09 06:28 
Большое всем спасибо!!!! Всё сделал, работает!!!
Не работало, потому что надо было указать полный путь к файлу user!