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

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

Код: plaintext
md5sum * | grep "^$(md5sum $filename | (read md5 name; echo $md5))"
...
Рейтинг: 0 / 0
помогите нарисовать bash скриптик
    #36943850
KTX15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
помогите нарисовать bash скриптик
    #36944266
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей Панфилов,

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

KTX15,
Код: plaintext
if [ newFileSum = oldFileSum ]; then
здесь нужны пробелы, так как по факту [ - это вызов встроенной утилиты test, а не
синтаксис шелла. Посмотрите в /usr/bin, там лежит выполнимый файлик с именем [, это он и есть :).
...
Рейтинг: 0 / 0
помогите нарисовать bash скриптик
    #36945514
KTX15
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
опять не получается
Код: 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
помогите нарисовать bash скриптик
    #36945672
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KTX15,

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

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

Не знаю... В моем баше так... 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
помогите нарисовать bash скриптик
    #36946005
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic HunterНе знаю... В моем баше так... так это кусок от let , а сравнение делает test
...
Рейтинг: 0 / 0
помогите нарисовать bash скриптик
    #36946008
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KTX15почему переменной mfound может присваиваться 1, если предыдущее echo выдает не равные строки в сравниваемых переменныхbreak
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / помогите нарисовать bash скриптик
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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