2009-11-07 2 views
2

J'écris un script pour rechercher un motif dans le fichier. Par exempleComment définir plusieurs mots variables à partir de l'entrée de ligne de commande dans le shell C

modèle nom_du_script fichier1 fichier2 filenN

J'utilise pour la boucle en boucle par des arguments argv, et il fait le travail si tous les arguments sont fournis. Cependant, si un seul argument est fourni (dans ce cas, il doit demander à entrer le nom du fichier ou les noms, puis vérifier le motif. Comment je peux définir une variable pour inclure plusieurs mots saisis à partir de la ligne de commande afin que je puisse l'utiliser en boucle. Ou encore mieux est-il possible d'assigner la ligne de commande à argv, donc je ne dois pas utiliser la même boucle deux fois seulement parce que c'est un nom de variable différent (un pour boucler argv si plus d'argument, et second nom de fichier variable si un seul argument est fourni). Voici la partie de mon script qui est le problème à l'origine:

set pattern = $1 
if ($#argv == 1) then 
    echo "Enter name of files" 
    set filenames = $< #how I can set it to accept more than word? 
endif 
+1

Tout d'abord, si elle est possible, vous devriez éviter d'utiliser csh. C'est coincé à l'âge de pierre. –

+0

Je sais mais c'est ce qui est utilisé à uni et malheureusement nous devons l'apprendre – Mike55

+0

Quel est le résultat de 'set filenames = $ <' si vous 'echo $ filenames' après avoir entré' file1 file2 file3'? Cela semble fonctionner correctement pour moi. –

Répondre

1

Vous pouvez utiliser shift et

#!/bin/csh 
set pattern = $1 
echo $pattern 
shift 
set remainder = "$argv" 
echo $remainder 

Et l'exécuter:

% ./demo a b c 
a 
b c 
+0

Il répond à la deuxième partie de ma question, mais s'il n'y a qu'un seul argument fourni, j'ai besoin d'une entrée supplémentaire du clavier. Si je tape pendant l'exécution du script manquant le nom des fichiers (non fourni comme argument): fichier1 fichier2 fichier3 Je voudrais définir reste pour stocker fichier1 fichier2 fichier3. Par exemple: echo "Entrez le nom des fichiers" ensemble reste = $ < echo $ reste de Sortie: fichier1 fichier2 fichier3 – Mike55

Questions connexes