运行bash脚本时期望的整数表达式

时间:2019-04-23 09:55:19

标签: bash shell jenkins

从詹金斯的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

的目录

2 个答案:

答案 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