从詹金斯的execute shell选项运行下面的脚本时,我得到了- [: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
的目录答案 0 :(得分:2)
您的folders
变量应初始化为数组而不是字符串,例如:
folders=($(ls -d */ | sed 's/\///g' | sed -e 's/^[[:space:]]//g' | sed -e's/[[:space:]]*$//' | tr '\n' ' '))
答案 1 :(得分:1)
鉴于有关“解析ls
不好”的各种注释,请考虑改用find:
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