views:

83

answers:

1

I am trying to write a C shell equivalent script for the bash script mentioned here.

This is what I have :

#! /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

and this is the error I get

$ ./scr
if: Badly formed number.
$

This page mentions that "Numbers in the C-shell must be integers", so I tried

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

but I get the same error still.

+3  A: 

I cut down your script to this:

#! /bin/tcsh

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

This gives the same error. I think the culprit is

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

What is -n supposed to do? I think it wants a number, but gets something else...

Update: -n in bash means "length of string is non-zero". In my version of tcsh it is as easy to replace as to use == "" like this:

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

Try that and see if it works.

Peter Jaric
@Peter: I myself have not used it before. From [this page](http://www.mkssoftware.com/docs/man1/csh.1.asp), "-n parses commands but does not execute them. This aids in checking the syntax of shell scripts".
Lazer
As far as I understand it, -n is an option to csh when you run it (as in `tcsh -n "echo hello there"`) and not something you can use in an if like that. -n seems to mean something in an if, though, but I can not find it quickly in my man page.
Peter Jaric
OK, I see that you took it verbatim from the bash script. In bash, or rather the test command, -n means that the length of the following string should be non-zero. Since this does not work in tcsh, you'll have to find the equivalent in tcsh or restructure your code somewhat.
Peter Jaric
I updated my answer with a solution proposal.
Peter Jaric
@Peter: works now, thanks!
Lazer
Great! How about checking the accepted mark? :)
Peter Jaric
@Peter: Sure, I'll wait some time in case anyone has some good suggestions.
Lazer
Thanks for the edit, Lazer :) My answer was kinda stupid before that.
Peter Jaric