Здравствуйте!
Не силён в скриптах на 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, поставить гдето символы $, то это можно изменить.
Просто я не знаю синтаксис команд, так бы я сам написал скрипт, принцип я знаю.Заранее благодарен!!!
>[оверквотинг удален]
>деал. В моём случае надо выполнить такую команду если условие совпадает:
>
>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/shcat 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Это первое что приходит в голову, но я думаю эту задачу можно решить даже каким нить перловым однострочником.
[...]
>Если возможно изменить синтаксис фаила, то тут делать нечего.Не надо менять синтаксис файла! KISS. Нужно просто за'source'ить этот файл в скрипт и пользоваться переменными $user и $ip как душе вашей будет угодно.
>синтаксис файла! 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
! -- -- !
$ _
А если в исходном файле разделителями пробелы или табуляцию использовать, то еще проще
> admin.lictadmin 192.168.0.4
masha 192.168.7.1cat user.list | while read UR IP; do
[ $UR = "admin" ] && [ $IP = "192.168.0.4" ] || continue
echo "URA" #здесь любая комманда которую нужно выполнить
done
Спасибо! Работает, но не совсем.
Скрипт сделал, вручную запускаю всё нормально, работает.
Но когда он запускается по вызову, то ни чего не происходит. Я думаю, что надо запускать с правами root.
Как запустить скрипт с правами root?
Заранее благодарен!!!
>Спасибо! Работает, но не совсем.
>Скрипт сделал, вручную запускаю всё нормально, работает.
>Но когда он запускается по вызову, то ни чего не происходит. Я
>думаю, что надо запускать с правами root.
>Как запустить скрипт с правами root?
>Заранее благодарен!!!Что есть по вызову? Из Cron-а ???
>Здравствуйте!
>Не силён в скриптах на 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
>---------------------
>Если нужно изменить синтаксис файла userif 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
Большое всем спасибо!!!! Всё сделал, работает!!!
Не работало, потому что надо было указать полный путь к файлу user!