2017-01-23 4 views
1

У меня есть скрипт, который будет проверять наличие нескольких условий в инструкции if и запускать желаемую команду, если это правда.Узнайте, какое из нескольких условий истинно

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

Теперь мне нужно знать, какой из нескольких условий был правдой. Например:/tmp/a или/tmp/b, который когда-либо существовал. Есть ли способ получить это в моем еще состоянии?

ответ

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

В принципе, мы используем два флага, которые устанавливаются на основе существования файла. Затем блок if-else будет использовать эти флаги, не беспокоясь о том, как они были установлены. – codeforester

+1

oh, для меня было ново, что мы можем установить [[]] с помощью if, а также устанавливать такие флаги. большое спасибо. – user2700022

0

Это пахнет, как будто в один прекрасный день будет проверено более двух файлов. Используйте петлю:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^