Value Too Great for Base Error, Explanation and Workout needed


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Value Too Great for Base Error, Explanation and Workout needed
# 1  
Old 11-19-2013
Value Too Great for Base Error, Explanation and Workout needed

Hey Friends, its me again! Smilie

I was asked to create a script that would go into our backup directories and delete/purge anything in the directory after a certain amount of days, normally I would be able to write something up that goes to the directory finds it and deletes it.

Code:
cd /bb/backup/svn

find *.gz -type f -a -mtime +8 -exec rm {} \;

But because we suffer from a annoying time drift since we use AWS for these particular servers. using find ended up being problematic. So i wrote the below script that pretty much took the time stamp out the file name and then determined to delete or not.

Code:
#!/bin/bash

source /bb/infrastructure/generic/utils/etc/bkupperm.conf

old_file()
{
    local dtcmp=`date -d "$1" +"%F"`; shift
    local today=`date -d "$*" +"%F"`
    return `test $((today - dtcmp)) -lt 0`
}

#Main Logic

cd $ENVR/database

for filename in *;
do
    dt_file=`echo $filename | grep -o -E '[12][0-9]{3}(-[0-9]{2}){2}'`
    if old_file "$dt_file" -7 days; then
        rm $filename
    fi
done

cd $ENVR/svn

for filename in *;
do
    dt_file=`echo $filename | grep -o -E '[12][0-9]{3}(-[0-9]{2}){2}'`
    if old_file "$dt_file" -7 days; then
        rm $filename
    fi
done

cd $ENVR/dpkg

for filename in *;
do
    dt_file=`echo $filename | grep -o -E '[12][0-9]{3}(-[0-9]{2}){2}'`
    if old_file "$dt_file" -7 days; then
        rm $filename
    fi

done

it seems to run fine but, i noticed the below error only for these two values, and i don't necessarily understand what's wrong or what i did wrong for starters, and two how to correct it and fix it.

Error:

Code:
./delete-bkup: line 9: 2013-11-08: value too great for base (error token is "08")
./delete-bkup: line 9: 2013-11-09: value too great for base (error token is "09")

any input would be GREATLY appreciated.

thanks
# 2  
Old 11-19-2013
Hi gkelly1117...

I have observed this before with something unrelated...

Perhaps it is being converted to octal values where 7 is the largest digit...

I can't help with a cure however...
# 3  
Old 11-19-2013
bash takes numerical input with leading zeroes to be octal values, hence 8 & 9 are too great. You can either strip the zeroes or indicate the base by e.g. a leading 10# . man bash:
Quote:
Constants with a leading 0 are interpreted as octal numbers. A leading 0x or 0X denotes hexadecimal. Otherwise, numbers take the
form [base#]n, where the optional base is a decimal number between 2 and 64 representing the arithmetic base, and n is a number in
that base. If base# is omitted, then base 10 is used. The digits greater than 9 are represented by the lowercase letters, the
uppercase letters, @, and _, in that order. If base is less than or equal to 36, lowercase and uppercase letters may be used inter‐
changeably to represent numbers between 10 and 35.
# 4  
Old 11-19-2013
Can I suggest you use %s format for your date output this gives seconds past epoch and will avoid the leading zero issue all together.

Code:
old_file()
{
    local dtcmp=`date -d "$1" +"%s"`; shift
    local today=`date -d "$*" +"%s"`
    (( dtcmp < today ))
}

As an example, the code you had was comparing 2008-12-22 and 2010-03-12 ==> 1974 and 1995

Last edited by Chubler_XL; 11-19-2013 at 04:43 PM..
# 5  
Old 11-19-2013
Quote:
Originally Posted by RudiC
bash takes numerical input with leading zeroes to be octal values, hence 8 & 9 are too great. You can either strip the zeroes or indicate the base by e.g. a leading 10# . man bash:
so 10#in front of my variable for time stamps would make it base 10 and eliminate the problem in its entirety?

going to try that now

---------- Post updated at 04:42 PM ---------- Previous update was at 04:39 PM ----------

Quote:
Originally Posted by Chubler_XL
Can I suggest you use %s format for your date output this gives seconds past epoch and will avoid the leading zero issue all together.

Code:
old_file()
{
    local dtcmp=`date -d "$1" +"%s"`; shift
    local today=`date -d "$*" +"%s"`
    (( dtcmp < today ))
}

As an example, the code you had was comparing 2008-12-22 and 2010-03-12 ==> 1974 and 1995
I wanted to use %s but was told for the way the way my boss wants it, to use %F it was his preference not mine.
# 6  
Old 11-19-2013
Well try a file with 2013-02-02 timestamp and you'll set that code thinks that file is not old!
# 7  
Old 11-19-2013
With yyyy-mm-dd format you can do a string comparison:
Code:
return [[ $today < $dtcmp ]]

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Explanation for Scripts Inner Workings Needed

#!/bin/bash n=$l; typeset -a v x=$(< input.dat) check(){ if; then sed 's/Test/Proc/g' file.sh >fl.sh else exit 13 fi } check $n while ; do x=`expr $x -l` v=$x done less fi.sh l>/dev/null&& echo yes || exit 1 echo v= ${v } exit 0 I have file.sh and input.dat in the current... (3 Replies)
Discussion started by: bananasprite
3 Replies

2. Shell Programming and Scripting

Little explanation needed on array

I had gone through..google search.....and unix user post.......where I found so many ways of accessing files..... suppose if I am having 4 files, each file is having 3 columns, and I want to use each field of each column, then how can I use it.. how can I create array for each file's each column,... (8 Replies)
Discussion started by: Dona Clara
8 Replies

3. UNIX for Advanced & Expert Users

Grep - Explanation needed.

grep -E '^(++){5}5000' <file_name> this command searches value 5000 in only 6th column from provided file where pipe ( | )is delimiter which separate columns... can some one plz explain me what '^(++){5}5000' actually does..? :confused: (1 Reply)
Discussion started by: Killer420
1 Replies

4. Programming

Python 3.1 TypeError explanation needed

Could someone explain why Python 3.1 errors out below? Do I need an additional module that's not required in 3.2 perhaps? I need to use 3.1 as it's the version available on a server I am using. Python 3.2.1rc1 (default, May 18 2011, 11:01:17) on linux2 Type "help", "copyright", "credits"... (0 Replies)
Discussion started by: jelloir
0 Replies

5. Shell Programming and Scripting

Explanation Needed

Hi all, I'm very new to UNIX. I have got a coding, where i dont understand the below part. Could someone please explain it in detail? awk 'NR > 1; NR == 1 { S = $0 } END { print S }' $textfile.bak > $textfile could someone explain what awk 'NR > 1; NR == 1 { S = $0 } END { print S }' ... (1 Reply)
Discussion started by: raghulshekar
1 Replies

6. Solaris

showrev output explanation needed

hi this is the output of showrev command from my sun blade 150 machine. bash-3.00# showrev Hostname: u15_9 Hostid: 83685284 Release: 5.10 Kernel architecture: sun4u Application architecture: sparc Hardware provider: Sun_Microsystems Domain: sun.com Kernel version: SunOS 5.10... (1 Reply)
Discussion started by: kingston
1 Replies

7. UNIX for Advanced & Expert Users

Which Base Level Filesets needed by a specific program?

hello... thats a great forum btw :) my problem is that I need a list of the Base Level Filesets (BLF) which are needed by a specific program. Is there any command/tool which shows me that? during the installation I can choose "Preview only" so that I can see what BLF´s are missing etc but... (4 Replies)
Discussion started by: cypher82
4 Replies

8. UNIX for Dummies Questions & Answers

Exec explanation needed

Hello! I want to read a file line by line and have each line in a variable. I have found the following code. #!/bin/bash exec 3< data while read <&3 do echo "The number is $REPLY" a.out "$REPLY" done exec 3>&- I don't understand the use of exec and its arguments, though having read... (3 Replies)
Discussion started by: myle
3 Replies

9. Shell Programming and Scripting

Windows driver needed for 1000 base tx card (HP)

First of all, excuse my ignorance in my questions, but truth is, I know nothing about Unix. I have recently purchased some A7012A's (dual port, 1000 base T/X) gigabit cards and need to use them in a windows environment. I am trying to see if it is possible to have drivers written for the card... (0 Replies)
Discussion started by: poaking
0 Replies

10. Shell Programming and Scripting

sed command explanation needed

Hi, Could you please explain me the below statement -- phrase wise. sed -e :a -e '$q;N;'$cnt',$D;ba' abc.txt > xyz.txt if suppose $cnt contains value: 10 it copies last 9 lines of abc.txt to xyz.txt why it is copying last 9 rather than 10. and also what is ba and $D over there in... (4 Replies)
Discussion started by: subbukns
4 Replies
Login or Register to Ask a Question