Ejecutar un comando si no falla u otro si falla bash

#/bin/bash
function delrar {
if [[ `echo $1 | tail -c7 | cut -c1-2` =~ [0-9][0-9] ]];then
   long=`echo $1 | wc -c`
   long=`expr $long - 7`
   borrar=`echo  $1 | cut -c1-$long`
   rm $borrar*
   else if [[ `echo $1 | tail -c3 | cut -c1-2` =~ [0-9][0-9] ]];then
      long=`echo $1 | wc -c`
      long=`expr $long - 3`
      borrar=`echo  $1 | cut -c1-$long`
      rm $borrar*
      fi
   fi
}

function desrar {
if [ `echo $1 | tail -c4 | cut -c1-3` == rar ];then
   rar x $1 /media/descargas/emule && delrar "$1"
   else if [[ `echo $1 | tail -c3 | cut -c1-2` =~ [0-9][0-9] ]];then
      long=`echo $1 | wc -c`
      long=`expr $long - 3`
      borrar=`echo  $1 | cut -c1-$long`
      rar x "$borrar"ar && delrar "$1"
      fi
   fi
}

for a in `find . -iname "*.part01.rar" -or -iname "*.r00"`;do
   desrar "$a"
   done


Estoy haciendo un script para descomprimir los archivos rar y borrarlos, como veries descomprime los archivos rar solo si van por partes, y si no falla al descomprimirlos los borra, mi idea es que si falla cree un archivo para que al pasar el find . -iname *.rar no vuelva a descomprimir los archivos que haya fallado y no los borre. Se que || es para si falla y && para cuando no falla pero ¿Como hago que haga el uno o el otro (Seria en la linea 2 de la funcion desrar?
No entiendo muy bien la duda. ¿"comando1 || comando2" no te sirve? Eso ejecuta comando1 y si falla ejecuta el comando2, como bien dices, y lo que quieres es ejecutar otros comandos si el primero te falla, ¿no?

También tienes la variable $?, que contiene el valor devuelto por el último programa.
¿Esto?

if[[ `comando` ]]; then
    comando1
    ...
    comando n
else
    comando1
    ...
    comando m
fi


Saludos:).
Me explico fatal: a ver si ahora se me entiende mejor, quiero que si rar funciona ejecute delrar y si falla quiero que ejecute otra funcion

Ya, con if [ "$?" == 0 ];then XXX; else YYY; fi valdra.
3 respuestas