Така че имам този скрипт, искам скриптът да тества за второто условие, ако "if" е невярно, което е в elif, за да тества дали е вярно. Освен ако не е невярно, което продължава и тества следващия elif. По принцип множество „други“.
#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.
./script.py
с някоиecho
би помогнала. Задаването на вашите променливи на конкретна стойност, която причинява разликата между планирания и действителния резултат (така че някой може да го стартира сам, за да види проблема и/или да тества предложена корекция), по същия начин. Както е, трудно е да знаеш какво искаш. - person Charles Duffy   schedule 18.05.2018$()
, а имената на променливите с главни букви се използват за променливи, които имат значение за самата обвивка -- собствените ви имена трябва да са с малки букви, за да се предотвратят потенциални конфликти. Вижте четвъртия параграф на pubs.opengroup.org/onlinepubs/9699919799/basedefs/ на последния и wiki.bash-hackers.org/scripting/obsolete на бившия. - person Charles Duffy   schedule 18.05.2018${1}
съвпада с${VAR2}
(като последното се третира като глобален модел), така че е важно е да знаете какви са действителните им стойности. Освен това бих препоръчал да стартирате скрипта си през shellcheck.net - ще има куп препоръки. - person Gordon Davisson   schedule 18.05.2018PS4=':$LINENO+' bash -x yourscript
, за да регистрирате всеки ред, докато се изпълнява, и след това идентифицирате първия ред, където всеки тест се държи различно от това, което очаквате, това ще помогне много за опростяване на въпроса (изваждане на всичко, което не е свързано с този единствен ред ). - person Charles Duffy   schedule 19.05.2018