Shell Script - Usando vários scripts em um só
Dica publicada em Shell Script / Miscelânea
Shell Script - Usando vários scripts em um só
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":
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:
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:
Pode ser substituída por:
Sem problema algum. Vai de cada um.
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...";
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;
then
echo "modificando...";
fi;
Sem problema algum. Vai de cada um.
Exemplo:
$ bash ./cria.sh
$ ./cria.sh && ./modifica./sh
Boa dica,
Abs.