Problem with gstat and octal value

Here are a few lines from my script. The problem I am having is that the statement for gstat returns this error:

line 43: [[: 08: value too great for base (error token is "08")

The statement is coming from gstat .
Is there a way to fix it? Apparently -eq 02 is coming up as some octal value, I need it to be recognized as 02 .

Apparently in this case the script still works but the error appears, not sure how to get rid of it.

if [[ "$file" =~ [A-Z] && $CDATE = "Jan" ]]; then jx1="01-January";
#jx1="03-Mar";
yeardir=$CYEAR;
mv "$file" /tmp/Move\ Lists/$dir/$yeardir/$jx1;
elif [[ "$file" =~ [A-Z] && $CDATE = "Feb" && $(/opt/csw/bin/gstat "$file" |grep Mod|awk '{print $2}'|cut -b 6,7) -eq 02 ]];
then jx1="02-February";
yeardir=$CYEAR;
mv "$file" /tmp/Move\ Lists/$dir/$yeardir/$jx1;

It's always recommended to mention your OS' and shell's versions; that keeps people from guessing.
Assuming bash . Look into its man page:

So - use a 10# prefix to eliminate your problem.

Some asides:

  • the closing fi is missing.
  • yeardir could be assigned outside the if construct.
  • mv "$file" /tmp/Move\ Lists/$dir/$yeardir/$jx1; could be executed outside as well.
  • "$file" =~ [A-Z] is tested twice - unnecessarily.
  • grep Mod|awk '{print $2}'|cut -b 6,7 could be condensed into one single awk command.
1 Like

So should it then look like this?

if [[ "$file" =~ [A-Z] && $CDATE = "Feb" && $(/opt/csw/bin/gstat "$file" |grep Mod|awk '{print $2}'|cut -b 6,7) -eq 10#02

I believe this probably isn't what you meant?

You are right, this

is not what I meant. Try (untested!):

if [[ "$file" =~ [A-Z] && $CDATE = "Feb" &&  $(/opt/csw/bin/gstat "$file" |awk '/Mod/ {print "10#" substr ($2, 6, 2}') -eq 02 ]] . . .

The 02 is a valid octal number, while the "command substitution" 's result might not be. Another option might be to suppress the leading 0 by printing 0 + substr (...) .

Step back a minute. Is gstat Gnu stat from the OpenCSW packages for Solaris?

Try this convolution instead of the one you were using (original post):

elif [[ "$file" =~ [A-Z] && $CDATE = "Feb" && $(/opt/csw/bin/gdate +%_m --date="$(/opt/csw/bin/gstat --format=%y "$file")") -eq 02 ]];

This way you get only the file modification time out of gstat (removes the need for both grep and awk ); then feed it into gdate which then pops out the month. gdate +%_m also replaces leading zeroes with leading spaces which should get rid of your 08 isn't an octal number problem.

The $(..."$(..."..."...)"...) should look after themselves.

Andrew

PS This is why you should say what OS, etc, you are using.