多次尝试该命令

sha*_*nuo 1 scripting shell shell-scripting

我需要执行一个命令并检查它是否成功。如果出现错误,我应该再试一次,以下代码按预期工作。

但是如果我需要尝试相同的命令 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
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来编写一个脚本,在退出前尝试该命令 4 次?

Sir*_*rch 11

使用循环执行 /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
Run Code Online (Sandbox Code Playgroud)

如果您愿意,可以使用 ac 样式进行循环

 #!/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
Run Code Online (Sandbox Code Playgroud)