Как сделать проверку имен файлов?
Есть прога делающая скриншоты с удаленного девайса. Нужно чтобы она сохраняла картинки с разными именами в одной папке.
Вот так все работает и сохраняет скриншот в один и тот же файл
#!/bin/sh
cd /ezxlocal/medl/scripts/
./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm.png
Хотелось бы чтобы скрины сохранялись под именем mm1.png,mm2.png и т.д.
Чтото типа такого
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";
не проверял - если есть ошибки - проверь по ману.
Ни чего не работает. Долго я ковырялся чтобы хоть что то понять в итоге понял что у меня линукс какой то странный...
например.
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 а не всякое... разное.
Ни чего не работает. Долго я ковырялся чтобы хоть что то понять в итоге понял что у меня линукс какой то странный...
например.
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). Так что это не линукс странный... :)
И используй средства форматирования кода при оформлении сообщения.
по сабжу - я бы сделал так:
cd /ezxlocal/medl/scripts/
./z6snap 240 320 /ezxlocal/download/mystuff/Screen/mm[COLOR="Red"]`date "+%Y-%m-%d_%H:%M:%S"`[/COLOR].png
Да нет у меня МАНа так же как и 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 [ -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
Почему то когда я пишу в своих скриптах все без ; у меня ни че не пашет, а тут пожалуйста в чем разница то??
if ***; then
***
else ***
fi
у меня ни чего не работает, говорит не видит fi
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
i=2
for i do echo xXx
done
Что должно произойти?
ничего. вы неверно используете конструкцию for
Теперь насчет оператора IF
if test -f /ezxlocal/download/mystuff/Screen/mm3.png; then
echo Yes
else echo No
fi
...
а у меня работает :-\ что-то вы недоговариваете.
Как ни чего? Это же цикл он хотябы раз должен пройти... в цикле у меня команда echo => должно что то произойти, например выйти сообщение :)
Если бы... :(
При такой записи, у меня пишет что не видит оператора fi...
А зачем нужны скобки () и {} я в гайдах не понимаю что пишут, я видел в некоторых скриптах под мой линукс люди вставляют разные скобки... может в них дело? :)
почему должно? цикл выполняется столько раз, сколько значений принимает переменная i. в данном случае - переменная i у вас неопределена. соответственно цикл выполняться не будет.
изучите внимательно это руководство и вопросы отпадут
http://www.opennet.ru/docs/RUS/bash_scripting_guide/