A dica é a seguinte:
Em scripts para
bash, existe um conjunto de variáveis especiais que repassam ao script parâmetros da linha de comando.
Em
C, isso aparece sob a forma de "int main(int argc, char *argv)".
Nos scripts, a variável que carrega todos os parâmetros sob forma de vetor é
$@. O número de parâmetros é indicado com
$#.
Cada parâmetro pode ser identificado pelo sinal de
$ seguido de um numeral. O primeiro parâmetro enviado pelo prompt é o nome do script, que é
$0.
Os outros serão $1, $2, $3 ... No caso, será abordada uma das utilidades do $0.
Seja então o script abaixo, chamado de "meuscript.sh":
#!/bin/bash
echo -n "$0 ";
[[ "$0" == "./cria.sh" ]] && echo "criando...";
[[ "$0" == "./modifica.sh" ]] && echo "modificando...";
[[ "$0" == "./elimina.sh" ]] && echo "eliminando..."
[[ "$0" == "./pesquisa.sh" ]] && echo "pesquisando...";
Com permissão de execução e criados os seguintes links no mesmo diretório:
chmod +x meuscript.sh
$ ln -s meuscript.sh cria.sh
$ ln -s meuscript.sh elimina.sh
$ ln -s meuscript.sh modifica.sh
$ ln -s meuscript.sh pesquisa.sh
Sendo executados no mesmo diretório, o que será enviado através da variável
$0, não será o nome do script (meuscript.sh) e sim o nome do link chamado.
Assim, se for pedida a execução da seguinte linha:
./modifica.sh
Aparecerá a seguinte mensagem:
./modifica.sh modificando...
Desta forma, pode ser criado um link com determinado nome a ser decidido pelo script qual função ele fará. Esta abordagem permite o uso das mesmas funções (sub-rotinas) do script juntas, dentro do mesmo arquivo.
Nota: a linha:
[[ "$0" == "./modifica.sh" ]] && echo "modificando...";
Pode ser substituída por:
if [ "$0" == "./modifica.sh" ]];
then
echo "modificando...";
fi;
Sem problema algum. Vai de cada um.
Concordo com o que for simples, melhor e mais prático. Agradeço pelos links.
Inclusive também há bons exemplos do getopt em /lib/lsb/init-functions
Muita coisa que aprendi sobre shell foi sem uma orientação desse sentido mais prático, de manutenção mais simples.
Tratando como simples programação comum, mais concisa. Original, mas nem sempre muito prático.
Eu necessitaria direcionar prá esse lado do que shellscript verdadeiramente e realmente se presta a ser útil.
Por exemplo, dá prá fazer um BD em shell e teve um cara que projetou um Assembler em shell.
(Existe até um servidor web em AWK).
Vejo todos estes mais como exercícios de desenvoltura. Teóricos e complexos, mas de grande valor de aprendizado.