Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как сделать проверку имен файлов?

7.6K
02 января 2009 года
den-911
17 / / 17.12.2004
Помогите пожалуйста со скриптом.
Есть прога делающая скриншоты с удаленного девайса. Нужно чтобы она сохраняла картинки с разными именами в одной папке.

Вот так все работает и сохраняет скриншот в один и тот же файл

#!/bin/sh
cd /ezxlocal/medl/scripts/
./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm.png

Хотелось бы чтобы скрины сохранялись под именем mm1.png,mm2.png и т.д.
1
02 января 2009 года
kot_
7.3K / / 20.01.2000
Посчитай количество файлов в твоей директории и к последнему добавь
Чтото типа такого
 
Код:
I =0;
find /ezxlocal/download/mystuff/Screen/ -type f -name '*.png' -name 'mm*' | while read FILENAME; do
Let "I=$I+1";
done
cd /ezxlocal/medl/scripts/
"./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm$I.png";

не проверял - если есть ошибки - проверь по ману.
7.6K
03 января 2009 года
den-911
17 / / 17.12.2004
Спасибо за быстрый ответ :)
Ни чего не работает. Долго я ковырялся чтобы хоть что то понять в итоге понял что у меня линукс какой то странный...
например.
I=0
echo mm$I.png

Получаем: .png

Пробовал сделать такую команду:

P=1
S=2
I=3
echo [$P][$S][$I]
Получил: 1][2][3

В общем какая то не здоровая ситуация :(

Для начала хотелось бы понять как сделать так чтобы при команде echo mm$I.png получалось mm0.png а не всякое... разное.
1
03 января 2009 года
kot_
7.3K / / 20.01.2000
Цитата: den-911
Спасибо за быстрый ответ :)
Ни чего не работает. Долго я ковырялся чтобы хоть что то понять в итоге понял что у меня линукс какой то странный...
например.
I=0
echo mm$I.png

Получаем: .png

Пробовал сделать такую команду:

P=1
S=2
I=3
echo [$P][$S][$I]
Получил: 1][2][3

В общем какая то не здоровая ситуация :(

Для начала хотелось бы понять как сделать так чтобы при команде echo mm$I.png получалось mm0.png а не всякое... разное.



Ну я же сказал - в man. Во первых обрати внимание - у меня код стоит в кавычках - у тебя нет. Во вторых - ты используешь sh - смотри ман по нему, в bash все должно работать без проблем (т.е. у меня скрипт должен начинаться #! /bin/bash). Так что это не линукс странный... :)
И используй средства форматирования кода при оформлении сообщения.

2
03 января 2009 года
squirL
5.6K / / 13.08.2003
маленькая ремарка - в Linux, если это не древний динозавр, /bin/sh давным-давно является симлинком на /bin/bash и оставлено для переносимости.

по сабжу - я бы сделал так:
 
Код:
#!/bin/sh
cd /ezxlocal/medl/scripts/
./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm[COLOR="Red"]`date "+%Y-%m-%d_%H:%M:%S"`[/COLOR].png
7.6K
03 января 2009 года
den-911
17 / / 17.12.2004
kot_
Да нет у меня МАНа так же как и Bash :( а в инете нашел только несколько гайдов по sh но в них не особо все доходчиво написано...
Просто этот линукс мой в телефоне находится и по этому он странноватый :)
Например команда
cd /ezxlocal/medl/scripts/
./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm.png
У меня не работает! Говорит не может переидти в папку...

Вот так команда выполняется но файл не сохраняется
cd /ezxlocal/medl/scripts/;./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm.png
А вот так все ок:
cd /ezxlocal/medl/scripts/;./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm.png;

squirL
Спасибо за мысль, все работает!!! только опять же пришлось методом тыка пошаманить в итоге выяснилось что с двоеточиями файл не сохраняется :)

squirL,kot_
У вас я так понмаю опыта по больше писать скрипты, я бы хотел понять логику синтаксиса своего Линукса у меня не получается сделать цикл он просто не работает...
Например:
i=2
for i do echo xXx
done

Тут по идее должно 2 раза выйти сообщение "xXx" или я не прав?

И еще, вот мой кусок кода который работает(именно с таким синтаксисом работает):
if test -f /ezxlocal/download/mystuff/Screen/mm3.png;then echo Yes
else echo No file;fi

А вот кусок кода который тоже работает, но написан не мной...
Код:
if [ "$1" = "-auto" ]; then
    if [ -e "$AUTO_FONT" ] && [ -e "`busybox head -n 1 $AUTO_FONT`" ]; then
        grep -q 'AMCSL.TTF' /etc/mtab
        if [ $? -eq 0 ]; then
            i="`busybox head -n 1 $AUTO_FONT`" 
            showNotify "Изм. шрифтов" "Установленно: \"${i##*/}"\" 1 5
            unset i
            exit 0
        fi
        SELECTED_FONT="`busybox head -n 1 $AUTO_FONT`"
        verify_exp $SELECTED_FONT
        if [ $? -ne 0 ]; then
            showNotify "Ошибка!!!" "Указаный файл: "$SELECTED_FONT" в "$AUTO_FONT" не является файлом шрифтов." 1 5
            echo "" > "$AUTO_FONT"
            exit 1
        else
            showNotify "Изм. шрифтов" "Устанавливаю: "$SELECTED_FONT" в качестве файла шрифтов ..." 1 5
            re_init_phone
        fi
        exit $?
    else
        showMsg "Изм. шрифтов" "Файл: $AUTO_FONT или указанный в нём шрифт ненайден или несуществует! Установить другой?" 1
        if [ $? -ne 0 ]; then
            /bin/sh $0 &
            exit 0
        else
            exit 1
        fi
    fi
fi

Почему то когда я пишу в своих скриптах все без ; у меня ни че не пашет, а тут пожалуйста в чем разница то??
2
03 января 2009 года
squirL
5.6K / / 13.08.2003
потому что ';' это для анализатора shell - разделитель команд. если вы точку с запятой не ставите, то shell не может правильно разобрать строку на лексемы. вам легко было бы читать текст в книге без пробелов и знаков препинания?
7.6K
03 января 2009 года
den-911
17 / / 17.12.2004
Да но в преведенном примере нет такого идиотзима который приходится делать мне... там вон ; стоят только перед Then и все... когда я пишу
if ***; then
***
else ***
fi
у меня ни чего не работает, говорит не видит fi
2
03 января 2009 года
squirL
5.6K / / 13.08.2003
напишите конкретный пример, без звездочек, пожалуйста
7.6K
03 января 2009 года
den-911
17 / / 17.12.2004
Повторю пример из поршлого поста...
i=2
for i do echo xXx
done

Что должно произойти?

Теперь насчет оператора IF

 
Код:
#Не работает

if test -f /ezxlocal/download/mystuff/Screen/mm3.png; then
echo Yes
else echo No
fi

# Работает
if test -f /ezxlocal/download/mystuff/Screen/mm.png;then echo YES
else echo NO;fi
2
03 января 2009 года
squirL
5.6K / / 13.08.2003
Цитата: den-911
Повторю пример из поршлого поста...
i=2
for i do echo xXx
done

Что должно произойти?


ничего. вы неверно используете конструкцию for

Цитата: den-911

Теперь насчет оператора IF

 
Код:
#Не работает

if test -f /ezxlocal/download/mystuff/Screen/mm3.png; then
echo Yes
else echo No
fi
...


а у меня работает :-\ что-то вы недоговариваете.

7.6K
03 января 2009 года
den-911
17 / / 17.12.2004
Цитата:
ничего. вы неверно используете конструкцию for


Как ни чего? Это же цикл он хотябы раз должен пройти... в цикле у меня команда echo => должно что то произойти, например выйти сообщение :)

Цитата:
а у меня работает :-\ что-то вы недоговариваете.


Если бы... :(
При такой записи, у меня пишет что не видит оператора fi...

А зачем нужны скобки () и {} я в гайдах не понимаю что пишут, я видел в некоторых скриптах под мой линукс люди вставляют разные скобки... может в них дело? :)

2
03 января 2009 года
squirL
5.6K / / 13.08.2003
Цитата: den-911
Как ни чего? Это же цикл он хотябы раз должен пройти... в цикле у меня команда echo => должно что то произойти, например выйти сообщение :)


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

изучите внимательно это руководство и вопросы отпадут
http://www.opennet.ru/docs/RUS/bash_scripting_guide/

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог