The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Сравнение строк...помогите!"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Сравнение строк...помогите!"  
Сообщение от realship on 05-Окт-07, 16:31 
Добрый день!

есть такое сравнение: (система FreeBSD 6.0)

#!/bin/sh

if [ "abc def" = ab* ];then
    echo GOOD
else
    echo BAD
fi

я не понимаю как сделать сравнение одной строки и другой, где другая строка является частью первой...

то есть * - это любые символы, и ? - любой один символ...

помогите плиз!
Спасибо!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Сравнение строк...помогите!"  
Сообщение от vic (??) on 05-Окт-07, 17:45 
>я не понимаю как сделать сравнение одной строки и другой, где другая
>строка является частью первой...

а я ваще не понимаю зачем строку с подстрокой сравнивать. Разве чтоб понять что попали на вырожденный вариант.

>то есть * - это любые символы, и ? - любой один символ...

true

Уточнение. Вам не понятно как работает приведенный код или вам надо что-то сравнить (что?) ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Сравнение строк...помогите!"  
Сообщение от realship on 05-Окт-07, 18:34 
>[оверквотинг удален]
>
>а я ваще не понимаю зачем строку с подстрокой сравнивать. Разве чтоб
>понять что попали на вырожденный вариант.
>
>>то есть * - это любые символы, и ? - любой один символ...
>
>true
>
>Уточнение. Вам не понятно как работает приведенный код или вам надо что-то
>сравнить (что?) ?

Мне понятно как это работает, проблема в том, что это НЕ работает :) всегда уходит в BAD

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Сравнение строк...помогите!"  
Сообщение от vic (??) on 05-Окт-07, 19:14 
>Мне понятно как это работает, проблема в том, что это НЕ работает
>:) всегда уходит в BAD

if [ "abc def" = ab* ];then

тут ab* будет расширено в случае если будут найдены элементы в каталоге (файлы/подкаталоги) начинающиеся на ab. Причем если будет найдено больше одного элемента начинающегося с ab, то они будут подставлены подряд в строку, например:
if [ "abc def" = ab_file1 ab_file2 ];then
результат ошибка

почаще заглядывайте в man bash, там это все есть :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Сравнение строк...помогите!"  
Сообщение от realship on 05-Окт-07, 18:38 
>[оверквотинг удален]
>
>а я ваще не понимаю зачем строку с подстрокой сравнивать. Разве чтоб
>понять что попали на вырожденный вариант.
>
>>то есть * - это любые символы, и ? - любой один символ...
>
>true
>
>Уточнение. Вам не понятно как работает приведенный код или вам надо что-то
>сравнить (что?) ?

Уточнение зачем сравнить: есть переменная например ip адрес, и константа = 192.168.150.
Надо сравнить, если переменная ip из одной подсети, то делаем одно, если из другой, то другое...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Сравнение строк...помогите!"  
Сообщение от vic (??) on 05-Окт-07, 19:07 
>[оверквотинг удален]
>>
>>true
>>
>>Уточнение. Вам не понятно как работает приведенный код или вам надо что-то
>>сравнить (что?) ?
>
>Уточнение зачем сравнить: есть переменная например ip адрес, и константа = 192.168.150.
>
>Надо сравнить, если переменная ip из одной подсети, то делаем одно, если
>из другой, то другое...

1. регепсы и sed, awk
2. [ `echo $SOME_IP | cut -b-${#SOME_IP}` = "192.168.150." ] && echo true
3. или еще как

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Сравнение строк...помогите!"  
Сообщение от L0n3R4ng3r (ok) on 06-Окт-07, 14:05 
>[оверквотинг удален]
>>
>>true
>>
>>Уточнение. Вам не понятно как работает приведенный код или вам надо что-то
>>сравнить (что?) ?
>
>Уточнение зачем сравнить: есть переменная например ip адрес, и константа = 192.168.150.
>
>Надо сравнить, если переменная ip из одной подсети, то делаем одно, если
>из другой, то другое...

something like this:

#! /bin/bash -x

ip=192.168.150.2

net=$(echo $ip |awk 'BEGIN {FS="."} {print $1"."$2"."$3"."}')
our_net=192.168.150.
if [ $our_net == $net ]; then
    echo true
else
    echo false
fi

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Сравнение строк...помогите!"  
Сообщение от phpcoder email(??) on 08-Окт-07, 09:06 
>[оверквотинг удален]
>
>ip=192.168.150.2
>
>net=$(echo $ip |awk 'BEGIN {FS="."} {print $1"."$2"."$3"."}')
>our_net=192.168.150.
>if [ $our_net == $net ]; then
>    echo true
>else
>    echo false
>fi

Если в скрипте заменить "/bin/bash" на "/bin/sh" и "$our_net == $net" на "$our_net = $net", то это будет более потрабельно.

P.S. А awk 'BEGIN {FS="."} {print $1"."$2"."$3"."}' можно заменить на более короткий вариант: awk -F. '{print $1"."$2"."$3"."}'

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Сравнение строк...помогите!"  
Сообщение от jd (??) on 07-Окт-07, 19:04 
>Уточнение зачем сравнить: есть переменная например ip адрес, и константа = 192.168.150.
>
>Надо сравнить, если переменная ip из одной подсети, то делаем одно, если
>из другой, то другое...

К слову сказать, начало адреса подсети не всегда совпадает с началом IP адреса (так, как в приведённом вами примере). Всё зависит от маски. Стандартной проверкой на принадлежность к сети является что-то вроде:

<ADDR> = <IP ADDR> AND <MASK> ; <ADDR> == <NETADDR>
где <IP ADDR> проверяемый IP адрес, <NETADDR> - адрес подсети, принадлежность к которой нужно установить, <MASK> - маска этой подсети, AND - побитовое "и", <ADDR> - переменная для сравнения.

Реализовать это можно по-разному, в зависимости от средств, которыми вы располагаете. Например на bash это может выглядеть примерно так:

#!/bin/bash
ADDR=192.168.150.3 # то, что нужно проверить
NETADDR=192.168.150.0
MASK=255.255.255.0

addr=(`echo $ADDR | tr . ' '`)
netaddr=(`echo $NETADDR | tr . ' '`)
mask=(`echo $MASK | tr . ' '`)
for i in 0 1 2 3; do
  addr[$i]=$(( addr & mask ))
done

if [ "${addr[*]}" = "${netaddr[*]}" ]; then
  echo true
else
  echo false
fi

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Сравнение строк...помогите!"  
Сообщение от jd (??) on 07-Окт-07, 19:13 
Что-то тут как-то странно всё проинтерпретировалось сайтом... В общем, скрипт должен был выглядеть вот так:

#!/bin/bash
ADDR=192.168.150.3 # то, что нужно проверить
NETADDR=192.168.150.0
MASK=255.255.255.0

addr=(`echo $ADDR | tr . ' '`)
netaddr=(`echo $NETADDR | tr . ' '`)
mask=(`echo $MASK | tr . ' '`)
for k in 0 1 2 3; do
  addr[$k]=$(( addr[k] & mask[k] ))
done

if [ "${addr[*]}" = "${netaddr[*]}" ]; then
  echo true
else
  echo false
fi


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Сравнение строк...помогите!"  
Сообщение от vg (??) on 05-Окт-07, 18:17 
>[оверквотинг удален]
>fi
>
>я не понимаю как сделать сравнение одной строки и другой, где другая
>строка является частью первой...
>
>то есть * - это любые символы, и ? - любой один
>символ...
>
>помогите плиз!
>Спасибо!

смотреть в сторону Regular Expression


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру