Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Общий по FreeBSD (http://forum.oszone.net/forumdisplay.php?f=10)
-   -   Скрипт на Shell (http://forum.oszone.net/showthread.php?t=261212)

dt88 25-05-2013 13:56 2156022

Скрипт на Shell
 
совсем ничего не писал до этого. нужно было написать небольшой скрипт который срабатывает при подключении pptp mpd5

if [ `echo 192.168.4.15 | grep '192.168.0.[0-9]*'` ]; then
echo 'ok'
fi

ругается, что выражение у if неверное.
хотя
[ `echo 192.168.4.15 | grep '192.168.0.[0-9]*'` ] ; echo $?
работает.
где может быть ошибка?

ruslandh 25-05-2013 14:06 2156028

Наверное, вы хотите :
if [ -z `echo 192.168.4.15 | grep '192.168.0.[0-9]*'` ]; then echo 'ok'; fi

AMDBulldozer 25-05-2013 16:15 2156081

Цитата:

Цитата ruslandh
if [ -z `echo 192.168.4.15 | grep '192.168.0.[0-9]*'` ]; then echo 'ok'; fi »

В этом варианте пропущены кавычки: if [ -z "`echo 192.168.4.15 | grep '192.168.0.[0-9]*'`" ]
Или так: if [ x == x"`echo 192.168.4.15 | grep '192.168.0.[0-9]*'`" ]

mar 25-05-2013 16:57 2156101

AMDBulldozer,
да нет, с -z работает и без кавычек. Попробуйте :)

Правда, у меня и без -z не ругается, хотя и ok не пишет

AMDBulldozer 25-05-2013 19:43 2156202

Цитата:

Цитата mar
с -z работает и без кавычек. »

Вы правы, действительно работает. Это меня удивило - я был уверен, что работать не будет. Признаю свою ошибку, наверное мне следовало проверить, прежде чем писать. Тем не менее, я всё равно считаю, что вариант с кавычками лучше - если результатов поиска grep будет больше одного, командная строка без кавычек выдаст ошибку.

Возможно автор исходно хотел написать что-то вроде такого:
Код:

echo 192.168.4.15 | grep '192.168.0.[0-9]* &> /dev/null
if (( \! $? )); then
  echo 'ok'
fi


Kent 25-05-2013 22:06 2156257

Вообще не понятно о чём речь.

`echo 192.168.4.15 | grep '192.168.0.[0-9]*'` всегда будет выдавать 1.
И что означает "192.168.0.[0-9]*"?

AMDBulldozer 26-05-2013 13:29 2156512

Цитата:

Цитата Kent
Вообще не понятно о чём речь.
`echo 192.168.4.15 | grep '192.168.0.[0-9]*'` всегда будет выдавать 1.
И что означает "192.168.0.[0-9]*"? »

Очевидно одна из строк переменная (к примеру, автор для простоты написал "echo 192.168.4.15", хотя имелось в виду "ifconfig" или какая-то другая команда, выдающая, помимо всего прочего, ip-адрес). И этот ip проверяется на принадлежность к определенной подсети.

Но, с другой стороны, какая нам разница почему автору нужно заставить работать данный кусочек сценария? Чтобы дать ему совет, понимать назначение данного сценария совершенно не обязательно.

dt88 27-05-2013 17:13 2157223

чего-то я сразу не знал что в начале файла надо писать
#!/bin/sh

чтобы на шелле интерпретировался. Заработало. Спасибо

Конечно место 129.168.4.15 будет переменная, это часть скрипта для прописывания маршрутов при подключении по pptp в зависимости от того, кто подключился

mar 29-05-2013 11:30 2158336

dt88,
ха :) Тогда надо писать, что это файл со скриптом, а то тут все, похоже, гоняли это все через командную строку без всяких шебангов :)


Время: 22:46.

Время: 22:46.
© OSzone.net 2001-