помогите написать унивесальный скрипт записи DVD образов

Модератор: Модераторы разделов

astar
Сообщения: 44
ОС: OpenSUSE 11, SLED 10

помогите написать унивесальный скрипт записи DVD образов

Сообщение astar »

Задача - записать образы из списка (текстовый файл) с определенной скоростью и определенным числом копий
не смейтесь, только осваиваю, читаю, читаю... но никак

Код: Выделить всё

#!/bin/sh
cpy="$3"
spd="$2"
#cnt=`cat $1 |wc -l`
for y in `cat "$1"`
    do
    i=$cpy
    while ["$i" -gt "0"]
        do
        while ["`file -s /dev/sr0`" -ne "empty"]
            do
            sleep 2
        done
        growisofs -Z /dev/sr0="$y" -use-the-force-luke=notray -use-the-force-luke=tty -use-the-force-luke=tracksize:1290096 -dvd-compat -speed="$spd" -use-the-force-luke=bufsize:32m
        i=$($i-1)
        eject
    done
done

вобщем нифига не работает. $1 - имя файла со списком образов
while ["`file -s /dev/sr0`" -ne "empty"] - так сделал проверку на то , что диск пустой определился, пока он не определился эта команда выдает "ERROR и т.д."
а как только определится "empty" - может как то можно по другому этот момент отследить? но скрипт до него уже работает не правильно
пробовал bash -x burn (имя скрипта)
выдает следующее

Код: Выделить всё

bash -x burn /home/astar/obrazy/LostSeminarsToWrite 4 1
+ cpy=1
+ spd=4
++ cat /home/astar/obrazy/LostSeminarsToWrite
+ for y in '`cat "$1"`'
+ i=1
+ '[1' -gt '0]'
burn: line 8: [1: команда не найдена
+ for y in '`cat "$1"`'
+ i=1
+ '[1' -gt '0]'
burn: line 8: [1: команда не найдена
+ for y in '`cat "$1"`'
+ i=1
+ '[1' -gt '0]'
burn: line 8: [1: команда не найдена
+ for y in '`cat "$1"`'
+ i=1
+ '[1' -gt '0]'
burn: line 8: [1: команда не найдена
+ for y in '`cat "$1"`'
+ i=1
+ '[1' -gt '0]'
burn: line 8: [1: команда не найдена


но мне это не помогает. пока :-)
Спасибо сказали:
Аватара пользователя
grouzen
Сообщения: 120
ОС: LFS, slackware

Re: помогите написать унивесальный скрипт записи DVD образов

Сообщение grouzen »

astar писал(а):
21.01.2009 21:25
burn: line 8: [1: команда не найдена


все правильно он говорит, т.к. [ - это встроенная команда bash'a, аналог команды test, поэтому проверяемое условие нужно писать через пробел, т.е.

Код: Выделить всё

while [ "$i" -gt 0 ]

отделять [ от условия пробелом (-:Ж
Спасибо сказали:
Аватара пользователя
Ariesbc
Сообщения: 120
ОС: Open SUSE 10.3

Re: помогите написать унивесальный скрипт записи DVD образов

Сообщение Ariesbc »

Вот когда-то написал скриптик, который у меня бекапы на диск нарезает.
Только для этого у тебя должны стоять - genisoimage и cdrecord
Далее сам скрипт
Да, параметр передаваемый в скрипт - это дата, на которую надо произвести запись (бекап)
если параметра нет - дата текущая.

Код: Выделить всё

#! /bin/bash

PATH=/bin:/usr/bin:/sbin
export PATH

FILE_SQL=""
FILE_MD=""

# Удаляем временный iso образ
function del_iso() {
    if [ -f "$1" ]
    then
        rm -f $1
    fi
    return 0
}

# Определяем кол. файлов архивов, если их больше одного - ошибка,
# сваливаем нафик :)
function count_file() {
    # $1 - Путь к файлам
    # $2 - Выражение поиска
    # $3 - Тип файла.
    RET=0
    ITR=0
    if [ -n "$1" -a -n "$2" -a -n "$3" ]
    then
        for FLS in $( ls ${1}${3} | grep -E $3-$2 )
        do
            ITR=$[${ITR}+1]
            if [ "$3" == "md" ]
            then
                FILE_MD=${FLS}
            fi
            if [ "$3" == "sql" ]
            then
                FILE_SQL=${FLS}
            fi
        done
        if [ ${ITR} -eq 1 ]
        then
            RET=0
        fi
    else
        RET=1
    fi
    return ${RET}
}

# Параметр для передачи даты в формате YYYY-mm-d {%Y-%m-%d}
# Метки дат

P1=`date +%Y-%m-%d`
if [ -n "$1" ]
then
    P1=`date -d $1 +%Y-%m-%d`
fi

if [ -n "$P1" ]
then
    LONG_DATE=`date -d $P1 +%Y-%m-%d`
    SMAL_DATE=`date -d $P1 +%d-%m-%Y`

    echo "Запись на дату -> "${SMAL_DATE}

    # Пути и имена файлов
    TMP="/home/files/tmp/"
    ISO="backup.iso"
    METKA="MSSQL_${SMAL_DATE}"
    PTH="/home/files/ftp/reserv/"
    REG_FILE=${LONG_DATE}-'[0-9]{6}'.rar
    DEVICE_ID="1,0,0"

    count_file ${PTH} ${REG_FILE} sql
    if [ $? -eq 0 ]
    then
        count_file ${PTH} ${REG_FILE} md
        if [ $? -eq 0 ]
        then
            # Удаляем временный файл
            del_iso ${TMP}${ISO}
            # Создаем временный образ диск
            genisoimage -o ${TMP}${ISO} -J -V ${METKA} ${PTH}sql/${FILE_SQL} ${PTH}md/${FILE_MD}
            if [ -f "${TMP}${ISO}" ]
            then
                # Делаем запись на диск
                cdrecord -v -eject -speed=4 dev=${DEVICE_ID} ${TMP}${ISO}

                # Удаляем временный файл
                del_iso ${TMP}${ISO}

                # Выводим дату, для удобства подписи диска
                echo "Запись на дату -> "${SMAL_DATE}" завершена!"
            else
                echo "Не обнаружен образ для записи"
            fi
        else
            echo "На одну дату должен быть только один архив MD 1C"
        fi
    else
        echo "На одну дату должен быть только один архив SQL базы данных"
    fi
else
    echo "Дата должна быть представлена в формате Y-m-d (прим. "`date +%Y-%m-%d`")"
fi
#############################################


Скрипт не идеален, но работает 100% :)
Неисповедимы пути программиста
Спасибо сказали: