1 (22.06.2013 22:58:39 отредактировано ELE©TRO-NI©)

#!/bin/sh

MOUNT="/media/DISK_A1/system"

export PATH=$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin
export LD_LIBRARY_PATH=$MOUNT/lib:$MOUNT/usr/lib:/lib:/usr/lib

start() {
    dd if=/dev/mtdblock/0 of=/media/DISK_A1/mtd0.bin 
    [color=red]diff /media/DISK_A1/mtd0.bin /media/DISK_A1/mtd0 если не совпадает [/color]
    dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0
}


case "$1" in
    start)
        start
        ;;
    stop)
        ;;
    restart)
        start
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

как можно сделать так чтобы выполнилась следующая команда если файлы не совпадают?

2

Ох и кривой же скриптик. Это вам учебное задание такое что ли?

Истинный hotplug - это обычная электрическая розетка: воткнул - работает, и никаких драйверов.
Arch Linux/Xfce/Xiaomi Mi Notebook Pro 15.6 | Slackware64-current/Xfce/Lenovo G580

3

Читаем man diff на предмет кодов возврата, откуда узнаём, что при несовпадении код возврата 1.
Читаем man bash на предмет условных операторов и способов проверки условий, а равно на предмет перенаправления вывода вникуда.
Применяем прочитанное на практике.

4

а вот интересный вопрос:
как сделать, чтобы diff не искал все различия до победного конца, а вылетал при первом же найденном различии?

95% процентов проблем находятся между клавиатурой и стулом.

5 (23.06.2013 17:59:05 отредактировано -=Serj=-)

Fat-Zer пишет:

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

Как я понял, проблема в обработке больших файлов?
Ключик у diff я не нашёл... Могу предложить такой велосипед ab

#!/usr/bin/env python
#_*_ coding: utf-8 _*_

from itertools import izip

with open('file1.txt', 'r') as f1, open('file2.txt', 'r') as f2:
    for line1, line2 in izip(f1, f2):
        if line1 != line2:
            print ("***%s\n***%s" %(line1, line2))
            break
Да, у меня Ubuntu.
Нет, не глючит.

6 (23.06.2013 21:22:56 отредактировано ELE©TRO-NI©)

сам скрипт

#!/bin/sh
dd if=/dev/mtdblock/0 of=/var/mtd0
diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null
 if [ "$?" = "0" ]; then
    exit
 else
    dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0
    logger "Flashing U-boot"
    date >> /media/DISK_A1/loguboot.txt
    fi
exit

проблема

/media/DISK_A1/system/etc # sh diffuboot
384+0 records in
384+0 records out
: Permission deniedcannot create /dev/null
diffuboot: line 11: syntax error: end of file unexpected (expecting "then")

7

cmp --help

не тоже самое ли?

#!/bin/sh

MOUNT="/media/DISK_A1/system"

export PATH=$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin
export LD_LIBRARY_PATH=$MOUNT/lib:$MOUNT/usr/lib:/lib:/usr/lib

start() {
dd if=/dev/mtdblock/0 of=/var/mtd0
diff /var/mtd0 /media/DISK_A1/mtd0
if [ "$?" = "0" ]; then 
logger "All OK" 
else
dd if=/media/DISK_A1/mtd0 of=/dev/mtdblock/0
logger "Error"
date >> /media/DISK_A1/error.txt
    fi
}


case "$1" in
    start)
        start
        ;;
    stop)
        ;;
    restart)
        start
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    ;;
esac

не пойму в чём дело. Роутер ругается

/media/DISK_A1/system/etc/init.d # ./S91diffuboot
-ash: ./S91diffuboot: not found

9

-=Serj=-⇓ пишет:

Могу предложить такой велосипед

уйди со своим питоном отсюда =)

Macumazan⇓ пишет:

cmp --help
не тоже самое ли?

спасибо... и как я только мог в своё время её проглядеть о_О

ELE©TRO-NI©⇓ пишет:

: Permission deniedcannot create /dev/null

странно это.... что за линукс/девайс?

можно использовать вместо него /dev/zero, если есть....

всегда(почти всегда) можно создать: mknod /dev/null с 1 3
если /dev на реальной ФС, то останется там навсегда (или до перепрошивки, если дело на роутере), если /dev временный, то до перезагрузки...

ELE©TRO-NI©⇓ пишет:

dd if=/dev/mtdblock/0 of=/var/mtd0
diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null
if [ "$?" = "0" ]; then

можно так: if ! diff /var/mtd0 /media/DISK_A1/mtd0 >/dev/null; then; then <бла-бла-бла>; fi
и даже без dd: diff /dev/mtdblock/0 /media/DISK_A1/mtd0 >/dev/null
и вместо diff'а лучше cmp применять, раз уж о нём упомянули... + с ключом -s можно отказаться от /dev/null

ELE©TRO-NI©⇓ пишет:

не пойму в чём дело. Роутер ругается

chmod +x забыл небось...
так и думал, что речь о каком-то ущербном роутере...

95% процентов проблем находятся между клавиатурой и стулом.

10

Macumazan пишет:
cmp --help

не тоже самое ли?

Она хоть и побайтово сравнивает, но ведь всё-равно сравнивает полностью, нет?

Fat-Zer пишет:

уйди со своим питоном отсюда =)

Всё-всё, улетучиваюсь ag

Да, у меня Ubuntu.
Нет, не глючит.

11

-=Serj=-⇓ пишет:

Она хоть и побайтово сравнивает, но ведь всё-равно сравнивает полностью, нет?

нет... до первого различия...

95% процентов проблем находятся между клавиатурой и стулом.