У меня проблема в скрипте bash снизу.
Я ЗАПУСКАЮ КОД, ТАК КАК ОНО РАЗМЕЩЕНО ЗДЕСЬ
Код моего bash-скрипта:
#! /bin/bash
CMD='
# go to a specific path
set -x
cd share/Images
# create an array, perform the extraction of dates from folders names , populate the array with dates
declare -a all_dates
j=0
s=0
all_dates=($(ls | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}"))
len=${all_dates[@]}
# vrification if dates are extracted correct
echo "$len"
# compare the dates
if [[ '$1' == '$2' ]]; then
echo "first important date and second important date are equal"
else
echo "first important date and second important date are different"
fi
# show the index of each elemnts and highlight the index of 2 important dates that are provided as arguments from comandline
for i in ${all_dates[@]}; do
echo "$i"
echo " Index is $j for array elemnt ${all_dates[$i]}"
# comparison with first important date
if [[ '$1' == ${all_dates[$j]} ]]; then
echo " bingo found first important date: index is $j for element ${all_dates[$j]}"
fi
# comparison with second important date
if [[ '$2' == ${all_dates[$j]} ]]; then
echo " bingo found second important date: index is $s for element ${all_dates[$j]}"
fi
j=$(($j+1))
s=$(($s+1))
done
'
ssh -t user@server << EOT
$CMD
EOT
Это вывод кода сверху:
Index is 16 for array elemnt
+ echo 2016-04-05
+ echo ' Index is 16 for array elemnt '
+ [[ 2016-03-15 == 2016-04-05 ]]
+ [[ 2016-03-26 == 2016-04-05 ]]
+ j=17
+ s=17
+ for i in '${all_dates[@]}'
2016-04-08
+ echo 2016-04-08
-sh: line 22: 2016-04-08: value too great for base (error token is "08")
Также структура элементов моего массива ГГГГ-ММ-дд. Ошибка появляется в операторе for
, поэтому необходимо изменить базу (с восьмеричной на десятичную). У меня было несколько попыток, я думаю, что это наиболее близко к решению, но мне это не удалось:
for i in "${all_dates[@]}"; do all_b+=( $((10#$i)) )
echo "${all_b[@]}"
done
Любая помощь приветствуется!
bc
вместо этого. - person stephanmg   schedule 28.11.2019echo "obase=10; ibase=8; OCTAL NUMBER HERE" | bc
преобразует восьмеричное число в десятичное. - person stephanmg   schedule 28.11.2019bash
под рукой. Строка2016-04-08
должна быть безвредной, пока она обрабатывается как строка. Это может вызвать ошибку при использовании в арифметическом контексте, включая индекс массива, но я не могу найти такое использование в вашем опубликованном коде. Действительно ли опубликованный код вызывает указанную ошибку, или вы не упростили свой код, чтобы задать вопрос? БР. - person tshiono   schedule 29.11.2019shebang
строка в начале. 2) Я протестировал код на удаленном сервере qnap, который работает хорошо. 3) Вы упоминаете, что имя папки что-то вродеAsrgv_Image_G_2016_04_08_20_24_33
, и выextracting
только дата, но опубликованный код просто проверяет соответствие строки безextracting
. 4) В опубликованном коде предполагается, что строка даты разделена тире-
, а имя папки в вашем комментарии разделено символом подчеркивания_
, как указано выше. я вообще в недоумении.. - person tshiono   schedule 29.11.2019Asrgv_Image_G_2016-04-08-20-24-33
. Извлечение2016-04-08
происходит в этой строкеall_dates=($(ls | grep -oE "[0-9]{4}-[0-9]{2}-[0-9]{2}"))
, и это сделает мой массивall_dates
, а элементы массива будут такими: `2016-03-15 2016-03-18' и так далее. - person Mihai   schedule 29.11.2019j=0 and s=0
также часть после комментария# compare the dates
иshebang
от!#
до#!
Спасибо, вы гений :D Теперь пост такой же, как на моей виртуальной машине. - person Mihai   schedule 29.11.2019extraction
. Но ваш обновленный скрипт по-прежнему работает без проблем. Что, если вы скопируете и вставите опубликованный код и попытаетесь его выполнить? Я полагаю, что самого кода и имен папок на сервере достаточно, чтобы воспроизвести ошибку, верно (исключая встроенные команды Linux на сервере, конечно)? - person tshiono   schedule 29.11.2019if [[ '$1' == ${all_dates[$j]} ]]; then
наif [[ '$1' -eq ${all_dates[$j]} ]]; then
, это вызовет указанную ошибку:value too great for base
. - person tshiono   schedule 29.11.2019==
, не должен отличаться от-eq
. - person Mihai   schedule 29.11.2019for
вместо${all_dates[@]}
должно быть${all_dates[$i]}
. Я обновлю сейчас. Я только что увидел, что если есть `${all_dates[@]}', ошибка не возникнет. - person Mihai   schedule 29.11.2019