Bash скрипт несколько, если express групп - PullRequest
2 голосов
/ 29 апреля 2020

Я новичок в bash скриптах, я пытаюсь сгруппировать несколько выражений в своем операторе if

minuteRun = $1
if 
[
    [ [ $minuteRun -eq 25 ] &&  [ $HR != 01] && [ $HR != 13 ] ] || 
    [ [ $minuteRun -eq 50 ] && [ $HR -eq 01 || $HR -eq 13 ] ]
]   
 then

Я называю это ./script.sh 45

Вот ошибки

  • . / Script. sh: строка 25: [: отсутствует `] '
  • . / Script. sh: строка 26: [: слишком много аргументов
  • . / Script. sh: строка 27: [: слишком много аргументов
  • . / Script. sh: строка 27: 12: команда не найдена
  • . / Script . sh: строка 28:]: команда не найдена

Ответы [ 2 ]

2 голосов
/ 29 апреля 2020

Есть ошибки синтаксиса esp. пробел между скобками, например [ [

Для этого лучше использовать арифметический c контекст в bash, используя (( ...)):

#!/usr/bin/env bash

minuteRun=$1

if 
((
    ( minuteRun == 25 && HR != 1 && HR != 13 )
    || 
    ( minuteRun == 50 && ( HR == 1 || HR == 13 ) )
))   
 then
1 голос
/ 29 апреля 2020

Лично я бы использовал case для этого

minuteRun=50 HR=01
case $minuteRun:$HR in
     50:01|50:13) echo ok;;
      *:01|*:13 ) echo fail;;
esac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...