Вложенные условия в Bash (если [[...)) - PullRequest
0 голосов
/ 06 мая 2011

У меня есть несколько вопросов, на которые я хотел бы получить ответ, так как я пока не эксперт Bash ... Есть несколько условий, которые мне нужно проверить перед выполнением конкретной задачи, но некоторые из них связаны и не могут быть отсоединены : Я бы хотел проверить следующее утверждение:

if ((1 OR 2) AND (3 OR 4))
   then
      blabla...
fi

Я сделал это до сих пор,

if [[ "[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]" && "[ `echo "$5" | cut -c 4-5` -lt 0 || `echo "$5" | cut -c 4-5` -gt 23 ]" ]]
   then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi

и все работает правильно. У меня такое ощущение, что есть что-то гораздо более легкое, что можно сделать, чтобы выполнить эту проверку, но я не понимаю, как ...

И, во-вторых, в коде, который я написал выше, вы можете увидеть это:

"[ `echo "$5" | cut -c 1-2` -lt 0 || `echo "$5" | cut -c 1-2` -gt 23 ]"

Простая квадратная скобка соответствует тестовой функции, верно? Так почему же он правильно вызывается при двойных кавычках? Я понимаю, что не мог поместить туда какую-либо обратную кавычку, это не имело бы никакого смысла для моего эха "$ 5" ..., но двойные кавычки должны заменить специальные символы, такие как $, и предотвратить игнорирование одиночных пробелов, так почему это заменяет [символ? Считается ли он одним из этих специальных символов?

Заранее благодарю за ответы!

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Не повторяйте себя:

a=$(echo "$5" | cut -c 1-2)
b=$(echo "$5" | cut -c 4-5)

или используйте синтаксис расширения параметров bash:

a=${5:0:2}
b=%{5:3:2}

И вы можете использовать арифметическую подстановку:

if (( a < 0 || a > 23)) && (( b < 0 || b > 23 )); then
      echo "La plage horaire indiquée n'est pas valide ! Format = HH-HH"
      exit 3
fi
0 голосов
/ 06 мая 2011

С help [[:

 ( EXPRESSION )   Returns the value of EXPRESSION
...