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;
RudiC
March 21, 2018, 7:05pm
2
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?
RudiC
March 22, 2018, 11:35am
4
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.