Bash 스크립트에서 "조건 성공 실패" 기능을 만드는 방법

Bash 스크립트에서 "조건 성공 실패" 기능을 만드는 방법

나는 이것에 접근하고 있습니다 :

myif() {
  if ([ $1 ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

주요 부분이 if ([ $1 ]) then잘못되었습니다. 나는 다음 세 가지 일을 할 수 있기를 원합니다.

# boolean literals, probably passed in as the output to variables.
myif true successhandler failurehandler
myif false successhandler failurehandler
# a function to be evaluated
myif checkcondition successhandler failurehandler

checkcondition() {
  true
  # or:
  # false, to test
}

파일을 확인하는 방법은 다음과 같습니다.

file_exists() {
  if ([ -e $1 ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

이 3가지 사례를 처리하면서 첫 번째 예제를 작동하게 만드는 방법이 궁금합니다. 나는 또한 eval이것을 사용하고 수행해 보았습니다.

myif() {
  if ([ "$*" ]) then
    shift
    $*
    true
  else
    shift
    shift
    $*
    false
  fi
}

하지만.

답변1

을 실행하려는 것으로 보이며 $1성공 또는 실패에 따라 $2또는 을 실행합니다 $3. 한 가지 방법은 다음과 같습니다.

successhandler() {
  echo GREAT SUCCESS
}

failurehandler() {
  echo sad failure
}

checkcondition() {
  if (( RANDOM < 15000 ))
  then
    true
  else
    false
  fi
}

myif() {
  # disable filename generation (in case globs are present)
  set -f
  if $1 > /dev/null 2>&1
  then
    $2
    true
  else
    $3
    false
  fi
}

여기서는 동작을 보여주기 위해 임의 버전의 성공 핸들러, 실패 핸들러 및 체크 조건을 만들었습니다.

다음은 몇 가지 실행 예시입니다.

$ myif true successhandler failurehandler
GREAT SUCCESS
$ myif false successhandler failurehandler
sad failure
$ myif 'test -f /etc/hosts' successhandler failurehandler
GREAT SUCCESS
$ myif 'test -f /etc/hosts/not/there' successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
GREAT SUCCESS
$ myif checkcondition successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
GREAT SUCCESS
$ myif checkcondition successhandler failurehandler
sad failure
$ myif checkcondition successhandler failurehandler
sad failure

내부적 으로는 myif()stdout과 stderr을 특별히 제거했습니다 ./dev/null

관련 정보