if bash bash - 成功完成后什么也不做,或者只做失败的事情

时间:2014-11-20 23:35:10

标签: bash if-statement

这是一个小文件,它将文件与另一个文件夹区分开来。如果没有 diff,retrun代码为零 - 为了成功,如果之间存在差异 两个文件,diff返回1,表示不成功。如果你使用quiet标志,diff会返回一个非常好的“这两个文件不同的通知。

我想唯一的问题是我想使用if语句,但我真的不想要 在“没有文件差异”或成功的情况下打印任何内容。我真的不想打印零成功。但我不能离开if;然后“没有”。我必须在当时之后输入一些命令。如果在“then”之后该行是黑色的,则程序错误输出。 “bash if”在“then”之后需要命令如果我只是输入一个echo语句,它会打印一个空白行。我也不想要那个。 我希望脚本在完全成功时什么也不做,只告诉我什么时候失败。所以 我不想要回声“$?”返回返回码。实际上我不需要任何东西。 我希望与“如果成功”相反。我试过测试一个if [!差异原始目标]但现在确实有效。

capser@casperhost:~$ cat /come/and/play/with_us/danny/puc_diff.sh2
#!/bin/bash
#set -x

original="/home/casper"
target="/sbcimp/dyn/data/EVT/GSD/scripts"
date=$(/bin/date +%Y%m%d)

for i in PUCZ.pl POI.pl PUConoff.pl PUCVolBands.pl PUCC.pl
do
if  diff -q $original/$i $target/$i
then
echo "$?"

fi
done


exit 0


capser@casperhost:~$ /come/and/play/with_us/danny/puc_diff.sh2
0
0
0
0
Files /home/casper/PUCC.pl and /where/on/a/road/to/nowhere/PUCC.pl differ
capser@casperhost:~$

〜 〜

1 个答案:

答案 0 :(得分:0)

你想要这个吗?

function casper_diff() {
    original="/home/casper"
    target="/sbcimp/dyn/data/EVT/GSD/scripts"
    date=$(/bin/date +%Y%m%d)

    for i in PUCZ.pl POI.pl PUConoff.pl PUCVolBands.pl PUCC.pl; do
        if ! diff -q $original/$i $target/$i; then
            return 1 # difference found, return
        fi
    done
    return 0
}

casper_diff

您可以使用此语法来反转意义:

if ! diff -q $original/$i $target/$i; then
    echo "same"
fi

如果您想留空,请使用":"

if diff -q $original/$i $target/$i; then
    : # nop
else
    echo "same"
fi