Как продолжить скрипт, если «если» ложно?Несколько "остальное" - PullRequest
0 голосов
/ 18 мая 2018

Итак, у меня есть этот скрипт, я хочу, чтобы скрипт проверял второе условие, если «if» - false, то есть в elif для проверки его true.Если это не ложь, из которой он продолжает и проверяет следующего элифа.В основном несколько «else».

#Basically It turns a argument into a variable. Because that can't 
#work in an if function.
#What the script is doing is its setting variables for the python script
#What vvTHISvv does is it turns the argument into a variable. 
if [[ "$1" != "" ]]; then
    VAR="$1"
else
    VAR=.
fi
if [[ "$2" != "" ]]; then
    VAR2="$2"
else
    VAR2=.
fi
if [[ "$3" != "" ]]; then
    VAR3="$3"
else
    VAR3=.
fi


if [[ ${2} = ${VAR2} ]]
#${2} =  ${2}
then
    echo "I am condition number 1"
    #outputs a number
    ./script.py "${VAR}" "`cat ${VAR2}` `echo ${VAR3}`"
elif [[ ${3} = "${VAR3}" ]]
#${3} = ${3}
then
    echo "I am condition number 2"
    #outputs a number

    ./script.py "${VAR}" "`echo ${VAR2}` `cat ${VAR3}`"
elif [[ ${2} = "${VAR2}" ]] || [[ ${3} = "${VAR3}" ]]
then
    echo "I am condition number 3"
    #outputs a number
    ./script.py "${VAR}" "`cat ${VAR2}` `cat ${VAR3}`"
else 
    echo "I am condition number 4"
    #outputs a number
    ./script.py "${VAR}" "${VAR2} ${VAR3}"
fi

Если я бегу по первому условию, оно работает

I am condition number 1
#*Insert whatever that python script did. Lets say it outputs "2"

Однако, если я тестирую по условию № 2

I am condition number 1
#*insert a bunch of errors
#related to the fact that its rolling based on the first "if"

Это не работает и просто бросается на условие номер 1.

Если бы было только два условия, я бы просто поставил «если» и «еще», но как вы это сделаете с четырьмяусловия.

В любом случае VAR и $ {1} - это одно и то же, причина, по которой переменная состоит в том, что условие и аргумент в ./script.py - это одно и то же.И вы не можете точно установить эти два равными друг другу в качестве условия в операторе IF.

1 Ответ

0 голосов
/ 18 мая 2018

Используйте case, (код ./script.py опущен, чтобы показать, как работает логика):

# Assumes none of the variables contain a '#' -- change to some other
# nonexistent string if needed.
case "$2#$3" in 
    "${VAR2}#${VAR3}") echo both ;;
    "${VAR2}#"*)       echo 1st ;;
    *"#${VAR3}")       echo 2nd ;;
    *)                echo none ;;
esac

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

case принимает несколько строк кода, как и if.Используя первое условие в вопросе, код будет выглядеть так:

case "$2#$3" in 
    "${VAR2}#${VAR3}") echo both ;;
    "${VAR2}#"*)       echo "I am condition number 1"
                     ./script.py "${VAR}" "$(<${VAR2}) ${VAR3}" ;;
    *"#${VAR3}")       echo 2nd ;;
    *)                echo none ;;
esac
...