A programação shell aceita argumentos de linha de comando. Argumentos de linha de comando são aqueles passados para o programa logo após a chamada deste na linha de comando. Exemplo:
mv teste.txt /home/samu/teste1.txt
Neste exemplo, mv é o comando e; teste.txt e /home/samu/teste1.txt são os argumentos de linha de comando.
O shell entende que os argumentos passados são posicionais e os armazena em variáveis internas nomeadas a partir de 1. Assim, o primeiro argumento passado será armazenado na variável 1, o segundo na variável 2, o terceiro na variável 3, e assim por diante. A isso chamados parâmetros posicionais.
O nome do script ou programa é armazenado numa variável interna de nome 0 (zero).
A quantidade de argumentos passados é armazenada numa variável de nome # .
A variável interna * armazena todos os argumentos passados.
Não esqueça que, na hora de utilizar o valor de todas estas variáveis em seu script, você deverá preceder o nome delas com o sinal de $ para realizar a substituição de variáveis corretamente.
Caso seu script receba mais que nove parâmetros, a partir do décimo, ao realizar a substituição de variáveis, você deverá envolver o nome da variável entre chaves para que o shell tenha o entendimento correto. Exemplo:
${10}
Caso você não faça isso, e escreva $10 o shell entenderá que você quer substituir o valor de $1 e o 0 estará voando na jogada, o que causará um erro.