Como fazer um “se não” no Bash sem um teste?

1

Eu gostaria de usar o valor de retorno de uma função bash em uma instrução 'if not'. O seguinte é um script de exemplo:

#!/bin/bash

function myfunction () {
 if [ $1 = "one" ]; then
  return 1
 elif [ $1 = "two" ]; then
  return 2
 else
  return 0
 fi
}

if myfunction "two"; then
 # just using echo as an example here
 echo yep $?
else
 # just using echo as an example here
 echo nope $?
fi

Existe uma maneira de modificar a parte 'if myfunction "dois"' de uma forma que este script ecoa 'sim 2'? Eu só consigo descobrir esse jeito feio. Como posso resolver isso de uma maneira melhor?

    
por Den 06.06.2013 / 11:32

4 respostas

2

if myfunction "two" no pseudocódigo é if the myfunction return code is zero when run with a single argument "two" . Se você quiser reverter a comparação ( is not zero ), basta adicionar um ! entre if e myfunction .

    
por 06.06.2013 / 11:59
1

Não tenho certeza do que você está perguntando, mas:

myfunction two; (( $? == 2 )) && echo yes || echo no
    
por 06.06.2013 / 11:47
0
myfunction "two"
myvar=$?
if [ $myvar -gt 0 ]; then
 echo yep $myvar
else
 echo nope $myvar
fi
    
por 06.06.2013 / 11:32
0

Por que não fazer o eco de dentro da função? Isso deve ser direto:

myfunction() {
    case "$1" in 
        one) echo "nope 0" ;;
        two) echo "yep 2" ;;
    esac
}
myfunction one
myfunction two
    
por 06.06.2013 / 11:51