Search code examples
scriptingshellcshtcsh

Whats wrong with this C shell script?


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.


Solution

  • 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.