2017-10-20 60 views
0

我在bash脚本中有一个函数,它对文件执行diff。我已经设置为echodiff如果存在,但是如果不存在,我只想打印出"No differences found in ANY Task Definitions"如果if-else语句中的所有条件都为空,则打印'something'

这是我的;

diff_taskDef() { 
MAS=master.json 
CUR=current.json 
clear 
mapfile -t awsReg < <(ls ~/regions) 
for awsrg in "${awsReg[@]}"; do 
mapfile -t awsTD < <(ls ~/regions/"$awsrg") 
    for td in "${awsTD[@]}"; do 
    DIFF="$(diff -q ~/regions/"$awsrg"/"$td"/"$td"-"$MAS" ~/regions/"$awsrg"/"$td"/"$td"-"$CUR")" 
     echo "$DIFF" 
    done 
done 

因此,而不是一个空白的屏幕,或者通过每个语句滚动没有积极diff"no diff found"我只是想一个如果没有不同

+0

不要使用'ls'这样的。 'awsReg =(〜/地区/ *)'。除了对所有有效的文件名都正确之外,当迭代它们时,不必将'〜/ regions /'添加回名称。 – chepner

回答

2

开始通过假设不存在会被发现。如果您发现差异,请更改标志diff_found的值。如果你喜欢那个点,你可以停止寻找更多的差异。

diff_taskDef() { 
    MAS=master.json 
    CUR=current.json 
    clear 
    diff_found=false 
    for awsrg in ~/regions/*; do 
    for td in "$awsrg"/*; do 
     if ! diff -q "$td-$MAS" "$td/$td-$CUR"; then 
      diff_found=true 
      break 2 # optional 
     fi 
    done 
    done 
    if [[ $diff_found = false ]]; then 
    echo "No differences found" 
    fi 
} 
+0

除了它之外,它看起来不错,它会丢失一个目录; /home/ec2-user/regions/eu-west-1/audience-view-dev-api/audience-view-dev-api-master.json – eekfonky

+0

...当文件相同时也没有消息。没有出现回显“找不到差异” – eekfonky