цикл for и пробелы

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

цикл for и пробелы

Непрочитанное сообщение bagas » 2013-05-29 13:49:20

Добрый день.
Не пойму почему мои пробелы не экранируются?
Имею такой скрипт.

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

#!/bin/sh
XLS=`ls /mnt/share/ZP_списки/*.xls`
SOR="/mnt/share/ZP_списки"
DES="/mnt/share/ЗП/"
BIN="/usr/local/bin/xls2csv"
##################
for f in "$XLS";
do
TIME=`date +"%H-%M-%S"`
RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
xls2csv -d cp866 -q 0 "$f" > "$SOR/Реестр-$RAN-от-$TIME.txt"
done

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

[code]# ls /mnt/share/ZP_списки/*.xls
/mnt/share/ZP_списки/ОО при реестр №1 от 22.01.2013   от  новый.xls
/mnt/share/ZP_списки/реестр №4от 21.05.2013.xls
[/code]
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: цикл for и пробелы

Непрочитанное сообщение Bayerische » 2013-05-29 14:12:47

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

#!/bin/sh
XLS=`ls /mnt/share/ZP_списки/*.xls`
SOR="/mnt/share/ZP_списки"
DES="/mnt/share/ЗП/"
BIN="/usr/local/bin/xls2csv"
SAVEIFS=$IFS
IFS='
'
##################
for f in "$XLS";
do
TIME=`date +"%H-%M-%S"`
RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
xls2csv -d cp866 -q 0 "$f" > "$SOR/Реестр-$RAN-от-$TIME.txt"
done
IFS=$SAVEIFS
exit 1

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: цикл for и пробелы

Непрочитанное сообщение bagas » 2013-05-29 14:33:38

Bayerische писал(а):

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

#!/bin/sh
XLS=`ls /mnt/share/ZP_списки/*.xls`
SOR="/mnt/share/ZP_списки"
DES="/mnt/share/ЗП/"
BIN="/usr/local/bin/xls2csv"
SAVEIFS=$IFS
IFS='
'
##################
for f in "$XLS";
do
TIME=`date +"%H-%M-%S"`
RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
xls2csv -d cp866 -q 0 "$f" > "$SOR/Реестр-$RAN-от-$TIME.txt"
done
IFS=$SAVEIFS
exit 1
Теже яйца.
Вот лог выполнения.

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

# sh -vvv new_cash
#!/bin/sh
XLS=`ls /mnt/share/ZP_списки/*.xls`
SOR="/mnt/share/ZP_списки"
DES="/mnt/share/ЗП/"
BIN="/usr/local/bin/xls2csv"
SAVEIFS=$IFS
IFS=''
for f in "$XLS";
do
TIME=`date +"%H-%M-%S"`
RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
xls2csv -d cp866 -q 0 "$f" > "$SOR/Реестр-$RAN-от-$TIME.txt"
done
/mnt/share/ZP_списки/ОО при реестр №1 от 22.01.2013   от  новый.xls
/mnt/share/ZP_списки/реестр №4от 21.05.2013.xls: No such file or directory
IFS=$SAVEIFS
exit 0
#

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

# ls "/mnt/share/ZP_списки/реестр №4от 21.05.2013.xls"
/mnt/share/ZP_списки/реестр №4от 21.05.2013.xls
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: цикл for и пробелы

Непрочитанное сообщение kpp » 2013-05-29 14:41:37

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

...
SAVEIFS="${IFS}"
IFS='
'
for f in ${XLS}
do
...
done
IFS="${SAVEIFS}"
...
Если система Фря (или же не Фря, но есть утилита jot),

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

RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
лучше заменить на

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

RAN=`jot -r 1 0 9`
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.

Аватара пользователя
bagas
лейтенант
Сообщения: 922
Зарегистрирован: 2010-08-18 19:49:01
Откуда: Воронеж
Контактная информация:

Re: цикл for и пробелы

Непрочитанное сообщение bagas » 2013-05-29 15:15:00

kpp писал(а):

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

...
SAVEIFS="${IFS}"
IFS='
'
for f in ${XLS}
do
...
done
IFS="${SAVEIFS}"
...
Если система Фря (или же не Фря, но есть утилита jot),

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

RAN=`grep -m2 -ao '[0-9]' /dev/urandom | head -n1`
лучше заменить на

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

RAN=`jot -r 1 0 9`
Спасибо огромное. Вышло все замечательно.
Система фряя. про утилиту jot не слышал.
Ты прав, в моем случае jot лучше использовать.
А напомни что делаю скобки {}?
Что бы ты не делал , жизнь слишком коротка!
Блог о BSD системах.

kpp
лейтенант
Сообщения: 613
Зарегистрирован: 2009-08-05 16:10:46
Откуда: Украина Днепропетровск-Киев
Контактная информация:

Re: цикл for и пробелы

Непрочитанное сообщение kpp » 2013-05-29 15:17:41

bagas писал(а):А напомни что делаю скобки {}?
Скобки дисциплинируют ;) и в будущем избавят от непонятных проблем.
В некоторых случаях без них вообще не обойтись - нужны для отделения имени переменной от чего-то еще.
Нет, ребята, я не гордый. Не загадывая вдаль, так скажу: зачем мне орден? Я согласен на медаль.