Bash скрипт некорректно отрабатывает переменные
Хочу в цикле создавать папки и записывать в них данные
#!/bin/bash
for i in `seq 10`; do
R=$(date +%s%N | cut -b10-19)
RANDOM=${R}
if [ $((i%2)) -eq 0 ]; then
echo ""
else
# nechetnaya
echo "rnd is---> ${RANDOM}"
mkdir -p "${RANDOM}" && touch ${RANDOM}"/myfile.txt" && echo "Current cycle is ${i}" >> ${RANDOM}"/myfile.txt"
fi
done
В отладке я вижу что RANDOM в строке mkdir ... генерится каждый раз разный! Хотя я инициализирую его как переменную. И поэтому скрипт не работает. Как сделать чтобы RANDOM в каждом цикле был статичен?

Ответы (2 шт):
$RANDOM это bash функция не константа поэтому при ее вызове вы получете каждый раз разные значения. поэтому вам нужно перееименовать вашу переменную RANDOM на чтото другое, например FOLDER_NAME
#!/bin/bash
for i in `seq 10`; do
R=$(date +%s%N | cut -b10-19)
FOLDER_NAME=${R}
if [ $((i%2)) -eq 0 ]; then
echo ""
else
# nechetnaya
echo "rnd is---> ${FOLDER_NAME}" && mkdir -p "${FOLDER_NAME}" && touch "${FOLDER_NAME}/myfile.txt" && echo "Current cycle is ${i}" >> "${FOLDER_NAME}/myfile.txt"
fi
done
Как уже говорилось:
${RANDOM} - это внутренняя функция Bash, которая возвращает псевдослучайное целое число в диапазоне от 0 до 32767
Более подробно: tldp.org
О цикле: для меня остается неясной инициализация новой переменной с неизменяемым значением уже объявленной переменной.
Возможно стоит указать шаг цикла, что бы не применять дополнительную проверку через деление с остатком.
Для seq это будет seq 1 2 10 - параметры: стартовое число шаг завершающее число
Установить шаг непосредственно в цикле можно так:
for ((i=1; i<=10; i=$i+2)); do
R="$(date +%s%N | cut -b10-19)"
echo "rnd is---> ${R}"
mkdir -p "${R}" &&\
touch ${R}"/myfile.txt" &&\
echo "Current cycle is ${i}" >> ${R}"/myfile.txt"
done