2010-09-11 9 views
2

J'essaye d'écrire un script équivalent de shell C pour le script bash mentioned here.Quel est le problème avec ce script shell C?

C'est ce que j'ai:

#! /bin/tcsh 

set now=`date +%Y%m%d%H%M.%S` 
if ((! -f "./cache") || (-n "`find ./monme -newer ./cache`")) 
then 
    touch cache -t "$now" 
    echo "new files added" | mail -s "new build" [email protected] 
endif 

et c'est l'erreur que je reçois

$ ./scr 
if: Badly formed number. 
$ 

This page mentionne que « Les chiffres de la coquille C doivent être des entiers », alors j'ai essayé

set now=`date +%Y%m%d%H%M` 

mais j'ai toujours la même erreur.

+0

L'espacement sur cette partie '(-n .....))' entre parenthèses et tiret * n * et aussi * puis * devrait être sur la même ligne que * si *? – t0mm13b

+0

@ tommieb75: toujours la même erreur. – Lazer

+0

@Lazer: dernier coup ... '(-n eval (" 'trouver ./monme -newer ./cache \' ")))' – t0mm13b

Répondre

3

J'ai coupé votre script à ceci:

#! /bin/tcsh 

if (-n "`find ./monme -newer ./cache`") then 
    echo hello 
endif 

Cela donne la même erreur. Je pense que le coupable est

-n "`find ./monme -newer ./cache`" 

Qu'est-ce -n censé faire? Je pense qu'il veut un nombre, mais obtient autre chose ...

Mise à jour: -n dans bash signifie "longueur de chaîne est non nulle". Dans ma version de tcsh il est aussi facile de remplacer à utiliser == « » comme ceci:

if ((! -f "./cache") || ("`find ./monme -newer ./cache`" != "")) 
then 
    touch cache -t "$now" 
    echo "new files added" | mail -s "new build" [email protected] 
endif 

Essayez cela et voir si cela fonctionne.

+0

@Peter: Je ne l'ai pas moi-même déjà utilisé. De [cette page] (http://www.mkssoftware.com/docs/man1/csh.1.asp), "-n analyse les commandes mais ne les exécute pas, ce qui aide à vérifier la syntaxe des scripts shell". – Lazer

+0

Pour autant que je le comprenne, -n est une option pour csh quand vous l'exécutez (comme dans 'tcsh -n" echo hello there '') et pas quelque chose que vous pouvez utiliser dans un tel cas. -n semble vouloir dire quelque chose dans un si, cependant, mais je ne peux pas le trouver rapidement dans ma page de manuel. –

+0

OK, je vois que vous l'avez pris textuellement du script bash. Dans bash, ou plutôt la commande de test, -n signifie que la longueur de la chaîne suivante doit être différente de zéro. Comme cela ne fonctionne pas dans tcsh, vous devrez trouver l'équivalent dans tcsh ou restructurer votre code. –