En un script, permite desplazar los parámetros, de modo que el valor del 1er parámetro ($1) es reemplazado por el valor del 2do parámetro ($2), el del 2do parámetro ($2) por el del 3er parámetro ($3) y así sucesivamente. Veamos un ejemplo:
$ mkdir tmp (creamos directorio de trabajo)
$ cd tmp (entramos en él)
$ touch {1..5}.txt (creamos varios archivos de texto)
Creamos un script con el siguiente contenido:
#!/bin/bash
#
## Entrar un numero variable de archivos
## como argumentos y comprimirlos con zip
i=1
while [ $# -gt 0 ]; do
zip ${1%%.*}.zip $1
i=$(($i+1))
shift
done
echo
Lo ejecutamos con algunos archivos como argumentos.
./script.sh 1.txt 2.txt 3.txt
Comprobamos el resultado, los borramos:
$ rm *.txt
Y probamos con otro número de argumentos.