При запуске моего нижеприведенного сценария из опции оболочки jenkins execute я получаю - [: 1 2 3 4 5: ожидалось целочисленное выражение , я тоже попытался использовать символ> без каких-либо удач, я не уверен, где именно я ошибся.
Любая помощь будет действительно полезной.
#!/bin/bash
declare -a folders
declare -a folders_req
db_ver=<the value which I got from my DB with trimmed leading & trailing spaces, like below>
#db_ver=`echo $( get_value ) |sed -e 's/\-//g' | grep -oP '(?<=DESCRIPTION)(\s+)?([^ ]*)' | sed -e 's/^[[:space:]]//g' | sed -e's/[[:space:]]*$//' | tr '\n' ' '| cut -d '/' -f2`
scripts_db_dir=`ls -td -- */ | head -1 | cut -d '/' -f1| sed -e 's/^[[:space:]]//g'`
cd ${scripts_db_dir}
folders=`ls -d */ | sed 's/\///g' | sed -e 's/^[[:space:]]//g' | sed -e's/[[:space:]]*$//' | tr '\n' ' '`
for i in "${folders[@]}"; do
if [ "${i}" -gt "${db_ver}" ]; then
echo "inside loop: $i"
folders_req+=("$i")
fi
done
#echo "$i"
#echo ${folders_req[@]}
Scripts_db_dir содержит каталог с именем вроде - 1 2 3 4 5
2 ответа
Ваша folders
переменная должна быть инициализирована как массив, а не как строка, например:
folders=($(ls -d */ | sed 's/\///g' | sed -e 's/^[[:space:]]//g' | sed -e's/[[:space:]]*$//' | tr '\n' ' '))
Учитывая различные комментарии, касающиеся "разбора ls
плохого", рассмотрите возможность использования вместо этого найти:
find * -maxdepth 1 -type d -name '[0-9]*' -print
Где:
-maxdepth 1
- ищет только текущий каталог, но не подкаталоги
-type d
- ищет только каталоги
-name '[0-9]*'
(или '[[:digit:]]*'
) - соответствует только элементам, состоящим из всех цифр
-print
- просто распечатайте результаты
Таким образом:
folders=($(find * -maxdepth 1 -type d -name '[0-9]*' -print))
или просто:
for i in $(find * -maxdepth 1 -type d -name '[0-9]*' -print); do
Похожие вопросы
Связанные вопросы
Новые вопросы
bash
Для вопросов о скриптах, написанных для командной оболочки Bash. Для сценариев оболочки с ошибками / синтаксическими ошибками, пожалуйста, проверьте их с помощью программы shellcheck (или на сервере веб-проверки оболочки по адресу https://shellcheck.net) перед размещением здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут касаться темы Super User, а не переполнения стека.