Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / помогите нарисовать bash скриптик / 15 сообщений из 15, страница 1 из 1
04.11.2010, 13:55
    #36937978
KTX15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
помогите нарисовать bash скриптик. выкачиваю вгетом xml файлик, теперь нужно убедиться, что это новый файл который можно обрабатывать. т.е. задача пройтись циклом по файлам из папки и сравнить их md5sum.
...
Рейтинг: 0 / 0
08.11.2010, 16:32
    #36942887
chAlx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Не очень понял задачу, но скорее всего она решается с помощью diff (возможно, по всей папке).
...
Рейтинг: 0 / 0
08.11.2010, 18:18
    #36943197
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Код: plaintext
1.
2.
newFileSum=$(md5sum $fileName | head -c  32 )
for x in *.*  
do if [ $(md5sum $x | head -c  32 ) = newFileSum]; then ...; done;
...
Рейтинг: 0 / 0
08.11.2010, 19:39
    #36943397
chAlx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
И если это неочевидно, отмечу: хеши типа md5 имеет смысл использовать, только если они где-то хранятся после расчёта (чтобы повторно не считать). Иначе это просто лишняя трата ресурсов на прокручивание через хитрожоумные алгоритмы блоков данных, которые можно сравнить непосредственно в сыром виде.
...
Рейтинг: 0 / 0
08.11.2010, 21:05
    #36943565
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Mozok,

Вы, похоже, не любитель легких путей

Код: plaintext
md5sum * | grep "^$(md5sum $filename | (read md5 name; echo $md5))"
...
Рейтинг: 0 / 0
09.11.2010, 04:15
    #36943850
KTX15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Mozok
Код: plaintext
1.
2.
newFileSum=$(md5sum $fileName | head -c  32 )
for x in *.*  
do if [ $(md5sum $x | head -c  32 ) = newFileSum]; then ...; done;


чего-то этот вариант как-буд-то циклится, пробовал вместо ... вставить echo, ничего не выводит но и не заканчивает работу. подозрение, что еще fi нехватает
попробывал перерисовать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
#!/bin/sh
mfound= 0 
fileName=/tmp/downloads/ 1 .xml
newFileSum=$(md5sum $fileName | head -c  32 )

for x in *.xml
do
        oldFileSum=$(md5sum $x | head -c  32 )
        echo $oldFileSum/$newFileSum

        if [newFileSum = oldFileSum]; then
                mfound= 1 
        fi

done

но получаю
./tst.sh: line 11: [newFileSum: command not found
...
Рейтинг: 0 / 0
09.11.2010, 11:01
    #36944266
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Андрей Панфилов,

да накропал за 5 минут первое, что в голову пришло.
Согласен, неуклюже получилось :).

KTX15,
Код: plaintext
if [ newFileSum = oldFileSum ]; then
здесь нужны пробелы, так как по факту [ - это вызов встроенной утилиты test, а не
синтаксис шелла. Посмотрите в /usr/bin, там лежит выполнимый файлик с именем [, это он и есть :).
...
Рейтинг: 0 / 0
09.11.2010, 17:25
    #36945514
KTX15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
опять не получается
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#!/bin/sh
mfound= 0 
fileName=/tmp/downloads/ 1 .new
newFileSum=$(md5sum $fileName | head -c  32 )

for x in *.xml
do
        oldFileSum=$(md5sum $x | head -c  32 )
        echo $oldFileSum/$newFileSum

        if [ newFileSum = oldFileSum ]; then
                mfound= 1 
        fi

done

if mfound= 1 
then
        echo 'duplicated'
else
        echo 'new file received'
fi
всегда выдает duplicated, т.е. if [ newFileSum = oldFileSum ] почему-то всегда тру.

ЗЫ. а где на английском вообще человечески прочитать синтаксис ? а то куда гуглом не набреду какие разрозненные обрывки
...
Рейтинг: 0 / 0
09.11.2010, 18:31
    #36945672
Mozok
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
KTX15,

Reference
...
Рейтинг: 0 / 0
09.11.2010, 19:06
    #36945735
KTX15
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Код: plaintext
1.
2.
3.
4.
5.
 echo $oldFileSum/$newFileSum

        if [ $newFileSum=$oldFileSum ]; then
                mfound= 1 
        fi
почему переменной mfound может присваиваться 1, если предыдущее echo выдает не равные строки в сравниваемых переменных: 8dda39155707587fca2039b96b393596/5c9597f3c8245907ea71a89d9d39d08e ?
...
Рейтинг: 0 / 0
09.11.2010, 19:42
    #36945772
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Код: plaintext
# man bash
KTX15
Код: plaintext
1.
2.
3.
4.
5.
 echo $oldFileSum/$newFileSum

        if [ $newFileSum==$oldFileSum ]; then
                mfound= 1 
        fi
почему переменной mfound может присваиваться 1, если предыдущее echo выдает не равные строки в сравниваемых переменных: 8dda39155707587fca2039b96b393596/5c9597f3c8245907ea71a89d9d39d08e ?
...
Рейтинг: 0 / 0
09.11.2010, 22:55
    #36945977
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Relic Hunter,

это же не php...

Код: plaintext
1.
2.
3.
4.
5.
6.
~$ a= 1 ;b= 1 ;c= 2 
~$ echo "a=$a b=$b c=$c"
a= 1  b= 1  c= 2 
~$ if [ $a = $c ]; then  echo  1 ; else echo  0 ; fi
 0 
~$ if [ $a = $b ]; then  echo  1 ; else echo  0 ; fi
 1 

хотя правильнее писать что-то в духе
Код: plaintext
if [ x$a = x$b ]; then  echo  1 ; else echo  0 ; fi 
чтобы не получить unary operator expected
...
Рейтинг: 0 / 0
09.11.2010, 23:10
    #36945996
Relic Hunter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Андрей Панфилов,

Не знаю... В моем баше так... Xотя, навеное, без разницы... можно и так "="

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
GNU Bash-3.0        Last change: 2004 June 26                  40

User Commands                                             BASH(1)

     << >>
          left and right bitwise shifts
     <= >= < >
          comparison
     == !=
          equality and inequality
     &    bitwise AND
     ^    bitwise exclusive OR
     |    bitwise OR
     &&   logical AND
     ||   logical OR
     _e_x_p_r?_e_x_p_r:_e_x_p_r
          conditional operator
     = *= /= %= += -=
          assignment
     _e_x_p_r_1 , _e_x_p_r_2
          comma
...
Рейтинг: 0 / 0
09.11.2010, 23:17
    #36946005
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
Relic HunterНе знаю... В моем баше так... так это кусок от let , а сравнение делает test
...
Рейтинг: 0 / 0
09.11.2010, 23:21
    #36946008
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите нарисовать bash скриптик
KTX15почему переменной mfound может присваиваться 1, если предыдущее echo выдает не равные строки в сравниваемых переменныхbreak
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / помогите нарисовать bash скриптик / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]