2017-01-23 12 views
1

if文で複数の条件をチェックし、その条件が真であれば、目的のコマンドを実行するスクリプトがあります。複数の条件のうちどれが真であるかを調べる

if [ ! -f /tmp/a ] && [ ! -f /tmp/b ]; then 
     touch /tmp/c else 
     echo "file exists" fi 

ここで、複数の条件のうちどれが真であるかを知る必要があります。 例:存在していた/ tmp/aまたは/ tmp/b。私のelseの状態でそれを得る方法はありますか?

答えて

0

ifは複合条件を使用しているため、elseは複合条件のどの部分が失敗したかを把握する方法がありません。

a_exists=0 
b_exists=0 
[[ -f /tmp/a ]] && a_exists=1 # flag set to 1 if /tmp/a exists 
[[ -f /tmp/b ]] && b_exists=1 # flag set to 1 if /tmp/b exists 
if [[ $a_exists == 0 && $b_exists == 0 ]]; then 
    touch /tmp/c 
else 
    [[ $a_exists == 1 ]] && echo "a exists" 
    [[ $b_exists == 1 ]] && echo "b exists" 
fi 
+0

説明してください。私はかなり混乱しています:) – user2700022

+0

基本的には、ファイルの存在に基づいて設定された2つのフラグを使用します。 if-elseブロックは、それらのフラグがどのように設定されているか心配することなくそれらのフラグを使用します。 – codeforester

+1

ああ、このようなフラグを設定して、[[]]を設定することができることは私には新しかった。どうもありがとう。 – user2700022

0

これは、チェックするファイルが2つ以上あるような気がします。ループを使用する:

i_am_happy=yeah 
for f in a b 
do 
    if [[ ! -f /tmp/$f ]] 
    then 
     echo "Criminy! No $f in tmp!" # or what else you would like to do. 
     i_am_happy=nope 
    fi 
done 
[[ i_am_happy == nope ]] && touch /tmp/c 
関連する問題