如何使用Bash比较变量中的元素?

时间:2015-09-28 19:09:55

标签: bash

我有2个变量,每个变量都包含6个值,我很难弄清楚如何比较这些值。在搜索之后,我甚至不确定如何检查他们的类型是否诚实。

这是其中一项功能:

localfiles="$(ls -l string_matching_pattern_* | awk '{print $5}')"
#Matches to the string_matching_pattern and then assigns their file sizes to the variable localfiles

echo "$localfiles"
10
123
4873
8734
2109

第二个功能基本上是相同的,但是从AWS S3存储桶中获取文件大小:

aws s3 ls s3://bucket/folder1 | awk '{print $3}'
s3files="$(aws s3 ls s3://bucket/folder1 | awk '{print $3}')"
echo "$s3files"
10
123
4873
8734
1111

基本上,如何比较这些输出或localfiless3files

中的任何值?

2 个答案:

答案 0 :(得分:3)

下式给出:

git checkout featureBranch && git merge master

你可以做到

$ localfiles="10                      
123
4873
8734
2109"
$ s3files="10
123
4873
8734
1111"

$ paste -d"-" <(echo "$localfiles") <(echo "$s3files") | bc
0
0
0
0
998

使用数组:

$ while read -u3 localsize; read -u4 s3size; do
    echo $((localsize - s3size))
done 3<<<"$localfiles" 4<<<"$s3files"
0
0
0
0
998

答案 1 :(得分:0)

将值保存到数组而不是变量,这样可以使您的值更容易比较:

local_sizes=()
s3_sizes=()

for i in $(ls -l string_matching_pattern_* |awk '{print $5}')
do    
    local_sizes+=($i)
done

for i in $(aws s3 ls s3://bucket/folder1 | awk '{print $3}')
do
    s3_sizes+=($i)
done

printf '%s\n' "${local_sizes[@]}"
printf '%s\n' "${s3_sizes[@]}"