скрипт:)

Модератор: Модераторы разделов

fixx
Сообщения: 430
Статус: индивид
ОС: fedora

скрипт:)

Сообщение fixx »

есть такая конструкция

Код: Выделить всё

grep "${common_name}" /etc/file | awk '{print "ifconfig  " $4 10.200.0.223 "}' > $CONFFILE

на выходе получается что-то типа
ifconfig-push 10.200.0.231 10.200.0.223
надо сделать, что вместо 10.200.0.223 подставлялось ип на еденичку меньше $4. в данном случае должно подставлятся 10.200.0.230. каким образом это вообще можно реализовать?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: скрипт:)

Сообщение diesel »

fixx писал(а):
23.01.2009 12:03
есть такая конструкция

Код: Выделить всё

grep "${common_name}" /etc/file | awk '{print "ifconfig  " $4 10.200.0.223 "}' > $CONFFILE

на выходе получается что-то типа
ifconfig-push 10.200.0.231 10.200.0.223
надо сделать, что вместо 10.200.0.223 подставлялось ип на еденичку меньше $4. в данном случае должно подставлятся 10.200.0.230. каким образом это вообще можно реализовать?


во так можно ip на единичку меньше:

Код: Выделить всё

diesel@debian:~$ echo 10.200.0.223 | awk '{ a=$1; b=$1; gsub("^.*\\.","",a); gsub("\\.[0-9]+$","",b); a-=1; print b"."a}'
10.200.0.222

на gawk'е можно проще записать, его нет у меня под рукой
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

diesel
спасибо:) а как в один скрипт все засунуть?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: скрипт:)

Сообщение diesel »

fixx писал(а):
23.01.2009 12:40
diesel
спасибо:) а как в один скрипт все засунуть?

Код: Выделить всё

grep "${common_name}" /etc/file | awk '{a=$4; b=$4; gsub("^.*\\.","",a); gsub("\\.[0-9]+$","",b);  print "ifconfig  " b"."a" 10.200.0.223 "}' > $CONFFILE


как-то так, то есть твой $4 - у меня $1, и print соответствующим образом отредактировать...
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

diesel
спасибо тебе большое:)
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

diesel
что-то не получается) т.е. он вывыводит то, что надо, но зачем тут
" b"."a" 10.200.0.223 "}
ип? он должен без него делать)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: скрипт:)

Сообщение diesel »

fixx писал(а):
23.01.2009 13:48
diesel
что-то не получается) т.е. он вывыводит то, что надо, но зачем тут
" b"."a" 10.200.0.223 "}
ип? он должен без него делать)

у тебя он печатал "$4 10.200.0.223" - тебе виднее зачем он там
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

diesel
ну да) а вместо 10.200.0.223 он должен подставлять значение на еденицу меньше $4
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: скрипт:)

Сообщение rm_ »

Код: Выделить всё

$ php -r '$a = explode(".", $argv[1]); $a[3]--; echo implode(".", $a);'  192.168.0.100
192.168.0.99

:)
В backtick'ах (``) эту конструкцию подставить, куда Вам надо.
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

rm_
я вас не понял вообще:) при чем тут пхп, что куда подставить?
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: скрипт:)

Сообщение rm_ »

Я Вас тоже не понял. Вы не даёте полных входных данных, но хотите полного решения.
Вот это, что за конструкция? Что внутри файла "/etc/file", чему равна $common_name?

Код: Выделить всё

grep "${common_name}" /etc/file |
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

rm_
внутри /etc/file

Код: Выделить всё

name       *       test           10.200.0.224

т.е. оттуда тащится айпишник. на $common_name можно не общать внимание и вместо него подставить хоть тот же name
в чем суть скрипта: по name грепается /etc/file, выводится айпишник, затем скрипт от последний цифры отнимает еденицу
и в конце делает вывод в файл: ifconfig-push айпишник, который грепнул айпишник, который грепнул минус еденица в конце
Спасибо сказали:
fixx
Сообщения: 430
Статус: индивид
ОС: fedora

Re: скрипт:)

Сообщение fixx »

в общем я сделал так:

Код: Выделить всё

str="ifconfig-push"
var1=`grep "gricenko" /home/gricenko/test/pap-secrets | awk '{print $4}'`
var2=`echo $var1 | awk '{ a=$1; b=$1; gsub("^.*\\.","",a); gsub("\\.[0-9]+$","",b); a-=1; print b"."a}'`
echo $srt $var1  $var2 > 12

наверное это адско криво, но работает:)
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: скрипт:)

Сообщение rm_ »

fixx
Ваш вариант у меня не сработал. В последнем октете айпишника вместо нормального значения ставил -1, и выдавал предупреждение:
awk: warning: escape sequence `\.' treated as plain `.'

Вот что я имел ввиду с PHP:

Код: Выделить всё

#!/bin/sh
str="ifconfig-push"
var1=`grep "$1" $2 | awk '{print $4}'`
var2=`php -r '$a = explode(".", $argv[1]); $a[3]--; echo implode(".", $a);' $var1`;
echo $str $var1 $var2 > $3

По-моему, гораздо более читабельно, чем абракадабра из awk'а.
Заодно скрипт изменил чуть, этот вариант нужно выполнять с параметрами:

Код: Выделить всё

# script.sh username inputfile outputfile
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: скрипт:)

Сообщение diesel »

rm_ писал(а):
23.01.2009 16:52
fixx
Ваш вариант у меня не сработал. В последнем октете айпишника вместо нормального значения ставил -1, и выдавал предупреждение:
awk: warning: escape sequence `\.' treated as plain `.'


вот у вас скорее всего awk, в реинкарнации gawk, в нем можно проще тоже самое написать - там есть gensub, или как-то так, который возвращает результат замены, а не заменяет в переменной как gsub/sub :)

по поводу php, кстати, а зачем делать однострочник на php? - тогда уже проще #!/usr/bin/php и сделать все на нем...
Спасибо сказали: