Мне нужно выполнить команду, а также проверить, была ли она успешной. Если произошла ошибка, я должен попробовать еще раз, и следующий код работает должным образом.
Но что, если мне нужно попробовать одну и ту же команду 3 или 4 раза, пока она не будет успешно выполнена? Предложение if / else станет довольно сложным.
some command
if [ $? -eq 0 ];then
echo "success"
else
echo "failed first attempt trying again"
some command
if [ $? -eq 0 ];then
echo "success in second attempt"
else
echo "failed second attempt"
fi
fi
Есть ли лучший способ написать сценарий, который будет выполнять команду 4 раза перед выходом?
Используйте цикл для выполнения / usr / local / some / command несколько раз, продиктованных MAX_TRIES. Если все попытки выполнения безуспешны, произойдет ошибка с кодом $ ERR. Если это успешно, он немедленно выйдет из 0 и выйдет из цикла.
#!/bin/bash
ERR=1 # or some non zero error number you want
MAX_TRIES=4
COUNT=0
while [ $COUNT -lt $MAX_TRIES ]; do
/usr/local/some/command
if [ $? -eq 0 ];then
exit 0
fi
let COUNT=COUNT+1
done
echo "Too many non-successful tries"
exit $ERR
Если вы предпочитаете, вы можете использовать стиль c для цикла
#!/bin/bash
ERR=1 # or some non zero error number you want
MAX_TRIES=4
for (( i=1; i<=$MAX_TRIES; i++ ))
do
/usr/local/some/command
if [ $? -eq 0 ];then
exit 0
fi
done
echo "Too many non-sucessful tries"
exit $ERR
Я действительно не могу задаться вопросом, как ты не можешь знать о цикле while.
редактировать. По просьбе ваших дружелюбных модераторов заглядывать, существенный трепать торт. Ура, торт!
while [ $w_count -lt $w_maxtries ]; do
some command
if [ $? -ne 0 ]; then
# cmd failed
let w_count=w_count+1
# optional, consider redirecting to STDERR.
echo "Warning, command failed the ${w_count}th time!"
if [[ $w_count -ge $(( $w_maxtries - 1 )) ]]; then
# whoops too many tries
echo "Giving up"
exit 1
fi
else
# Yay it worked
break
fi
done
# continue here.