2010-05-08 5 views
0

J'écris un script shell (tcsh) supposé recevoir 3 paramètres ou plus. Les 3 premiers doivent être passés à un programme, et les autres sont supposés être passés à un autre programme. Dans l'ensemble le script devrait ressembler à:Passer des arguments partiels dans tcshell

./first_program $1 $2 $3 
./second program [fourth or more] 

Le problème est que je ne sais pas comment faire ce dernier - passer tous les paramètres qui sont après la troisième.

Répondre

1

Vous pouvez utiliser shift comme suit:

./first_program $1 $2 $3 

shift # shift 3 times to remove the first 3 parameters. 
shift 
shift 

./second program $* 

$* contiendra les autres paramètres.

Vous devez également vérifier les erreurs avant de faire shift en vérifiant $#argv et en vous assurant que la valeur est différente de zéro. Vous pouvez également vérifier la valeur de $#argv à l'étoile du script et vous assurer qu'il est au moins 3.

2

Je vous présente la commande shift:

shift [variable]
Sans arguments, les rejets argv[1] et décale les membres de argv à gauche.

Exemple:

$ cat /tmp/tcsh.sh 
#!/bin/tcsh 

echo "$1" "$2" "$3" 
shift 
shift 
shift 
echo "$*" 
$ /tmp/tcsh.sh 1 2 3 4 5 6 
1 2 3 
4 5 6 
Questions connexes