nooblinux, if e elif não são as mesmas coisas, afinal o if testa uma condição e "se" for verdadeira ou falsa, ações que você venha a definir serão realizadas.
O else vem depois do if com a condição de ser executado apenas se a condição do "if" não for verdadeira, ou seja, seria um "senão":
if var=1; then #A condição aqui é: Se var for igual a 1, faça.
echo "$var é igual a 1"
else #A condição aqui é: se var não for igual a 1, faça.
echo "$var não é igual a 1"
fi
O else vem para fechar o if afim de ser executado caso o if seja falso.
O Elif é uma junção de if + else, seria um "senão, se". Com ele podemos adicionar mais condições e evitar um monte de if e fi no script.
Em resumo: if = se. elif = senão, se. else = senão.
Exemplo de um script com o elif:
#!/bin/bash
echo -n "qual o valor de var:
> "
read var
if [ $var = 1 ]; then #A condição aqui é: Se var for igual a 1, faça.
echo "$var é igual a 1"
elif [ $var = 2 ]; then #A condição aqui é: Se var for igual a 2, faça.
echo "$var é igual a 2"
elif [ $var = 3 ]; then #A condição aqui é: Se var for igual a 3, faça.
echo "$var é igual a 3"
else #A condição aqui é: se var não for igual a 1, 2 ou 3, faça.
echo "$var não é igual a 1, 2 ou 3"
fi
Sem o elif esse exemplo ficaria cheio de ifs, fis e elses:
#!/bin/bash
echo -n "qual o valor de var:
> "
read var
if [ $var = 1 ]; then #A condição aqui é: Se var for igual a 1, faça.
echo "$var é igual a 1"
else #A condição aqui é: se var não for igual a 1, faça.
echo "$var não é igual a 1"
fi
if [ $var = 2 ]; then #A condição aqui é: Se var for igual a 2, faça.
echo "$var é igual a 2"
else #A condição aqui é: se var não for igual a 2, faça.
echo "$var não é igual a 2"
fi
if [ $var = 3 ]; then #A condição aqui é: Se var for igual a 3, faça.
echo "$var é igual a 3"
else #A condição aqui é: se var não for igual a 3, faça.
echo "$var não é igual a 3"
fi
Agora, tirando o erro que o companheiro Imoogi viu em seu script, onde trocou o fi pelo if, que me parece mais um erro de digitação, o seu script não funcionou pelo seguinte:
1 - O if e o elif teriam de tratar de uma mesma variavel.
Exemplo:
Se a variável mover for igual a 1, faça;
Senão, se a variável mover for igual a 2, faça;
Senão, faça;
fim
Veja que está sendo tratada a variavel mover. No seu script o if trata a variavel mover e o seu elif trata a variavel mover2. Tá uma salada mista isso.
Se o if tratadar da variavel $mover, os elifis a seguir tem de tratar da mesma variável. Do contrario, tudo fica uma completa zona.
É algo como se alguem te falasse: "Se o balde($mover) esta cheio, esvazie, senão, se a privada ($mover2) estiver entupida, desentupa."
Conversa de louco, né, mudar de assundo em uma mesma frase???
2 - Existe também um erro de logica no seu script, que segue a seguinte logica:
Primeiro, Se a variavel op valer 0, o script é encerrado. Até aqui OK.
Segundo, Se a variavel op valer 1 pergunte: Arquivo ou pasta que deseja mover:
Se a resposta é armazenada na variavel $mover.Caimos no primeiro if:
if [ -e $mover ]; then
Essa condição não será executada se a variavel mover não estiver vazia.
Essa condição apenas esta sendo executada por que a variavel $mover esta vazia.
Esta vazia por que para o resultado do echo ser armazenado dentro da variavel é preciso do parametro "echo -n Pergunta"
Apenas por isso o primeiro if é executado e lhe é perguntado "para onde quer movelo:".
Essa pergunta teria sua resposta armazenada em $mover2, mas assim como no caso anterior, $mover2 não tem nenhum valor.
Então, ja que no primeiro if nada aconteceu, caimos no segundo if:
if [ -e $mover2 ]; then
Nesse caso, como esse mover2 esta vazio, afinal, não foi informado qualquer valor a ele, essa condição é verdadeira e será executado o comando mv $mover $mover2.
Porém $mover e $mover2 não tem valor e por isso o comando mv irá gerar um erro pela falta do origem e destino.
Por isso, para esse seu script o uso do elif não é indicado.
Veja como ele ficaria se tentássemos forçar e inserir o elif:
#!/bin/bash
#move arquivos de uma pasta para outra
op=1
case $op in
0)
exit ;;
1)
echo -n "Arquivo ou pasta que deseja mover:"
read mover
if [ ${#mover} -gt 0 ]; then
echo
echo -n "para onde quer movelo:"
read mover2
echo
elif [ -e $mover ]; then
echo "Saindo... Não foi especificado arquivo ou pasta a ser movido."
exit
fi
if [ -e $mover2 ]; then
echo "saindo... Não foi especificado destino dos dados."
elif [ ${#mover2} -gt 0 ]; then
echo "movendo $mover para $mover2"
echo
mv $mover $mover2
echo "arquivo movido com sucesso"
echo
exit
fi ;;
esac
obs: if [ ${#mover} -gt 0 ]; then = Isso serve para contar quantos caracteres existem na variavel $mover e se dentro da variavel tiver mais de 0 caracteres, a condição será verdadeira e as ações dentro desse if serão executadas.