Показать полную графическую версию : Скрипт на 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
Наверное, вы хотите :
if [ -z `echo 192.168.4.15 | grep '192.168.0.[0-9]*'` ]; then echo 'ok'; fi
AMDBulldozer
25-05-2013, 16:15
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]*'`" ]
AMDBulldozer,
да нет, с -z работает и без кавычек. Попробуйте :)
Правда, у меня и без -z не ругается, хотя и ok не пишет
AMDBulldozer
25-05-2013, 19:43
с -z работает и без кавычек. »
Вы правы, действительно работает. Это меня удивило - я был уверен, что работать не будет. Признаю свою ошибку, наверное мне следовало проверить, прежде чем писать. Тем не менее, я всё равно считаю, что вариант с кавычками лучше - если результатов поиска grep будет больше одного, командная строка без кавычек выдаст ошибку.
Возможно автор исходно хотел написать что-то вроде такого:
echo 192.168.4.15 | grep '192.168.0.[0-9]* &> /dev/null
if (( \! $? )); then
echo 'ok'
fi
Вообще не понятно о чём речь.
`echo 192.168.4.15 | grep '192.168.0.[0-9]*'` всегда будет выдавать 1.
И что означает "192.168.0.[0-9]*"?
AMDBulldozer
26-05-2013, 13:29
Вообще не понятно о чём речь.
`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 проверяется на принадлежность к определенной подсети.
Но, с другой стороны, какая нам разница почему автору нужно заставить работать данный кусочек сценария? Чтобы дать ему совет, понимать назначение данного сценария совершенно не обязательно.
чего-то я сразу не знал что в начале файла надо писать
#!/bin/sh
чтобы на шелле интерпретировался. Заработало. Спасибо
Конечно место 129.168.4.15 будет переменная, это часть скрипта для прописывания маршрутов при подключении по pptp в зависимости от того, кто подключился
dt88,
ха :) Тогда надо писать, что это файл со скриптом, а то тут все, похоже, гоняли это все через командную строку без всяких шебангов :)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.