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":
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.
[3] Comentário enviado por removido em 17/04/2013 - 19:51h
Sobre um modo de o && funcionar.
Muitas vezes só se tem dois minutos prá resolver algum problema. Não há como perder tempo com depuração.
Scripts costumam ter essa utilidade. Neste exemplo, o script não cobriu uma destas falhas.
Um dos problemas adicionais envolveria o caminho onde o script se encontraria em caso de execução.
Sendo um diretório local, $0 equivale a ./nome_executado.
Se estivesse em /usr/local/bin/nome_executado, $0 teria exatamente o valor dessa string.
Este exemplo direcionou-se apenas no nome usado na execução.
Esta ideia depende de como é aplicada. Se pode ser posta em prática ou se é viável.
O que envolveria "detalhes de projeto".
O exemplo
$ ./cria.sh && ./modifica./sh
não funciona como deveria, mas
$ ./cria.sh || ./modifica./sh
executa os dois comandos.
Mas se no final do script for colocado uma dessas instruções
[4] Comentário enviado por julio_hoffimann em 17/04/2013 - 20:08h
Toda solução é possível, resta saber se é prática e manutenível. Você deve se espelhar nos aplicativos GNU, eles não utilizam o artifício proposto para prover diversas funcionalidades.
A solução correta quando se deseja diversas operações em um mesmo script é utilizar o getopt ou o builtin do Bash getopts para opções na linha de comando.
[5] Comentário enviado por removido em 17/04/2013 - 20:45h
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.