Puppy Linux Discussion Forum Forum Index Puppy Linux Discussion Forum
Puppy HOME page : puppylinux.com
"THE" alternative forum : puppylinux.info
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

The time now is Mon 20 May 2013, 00:07
All times are UTC - 4
 Forum index » Off-Topic Area » Programming
Programming logic
Post new topic   Reply to topic View previous topic :: View next topic
Page 1 of 1 [7 Posts]  
Author Message
8-bit


Joined: 03 Apr 2007
Posts: 3012
Location: Oregon

PostPosted: Tue 04 Oct 2011, 14:53    Post subject:  Programming logic
Subject description: Problem, logic, and solution
 

I was thinking on posting or not posting this.
But here are steps I took.

(1) Problem:
You have two types of frugal Puppy pupsave file backups with each having a given name format.
You also want to be able to do a straight copy if those names do not match the input file.
In the case of the pupsave backups, the destination file name has to have a date-time stamp in the filename removed.
In the case of another file name, it has to be passed unchanged.
(2) logic and solution
This script needs to be run from a terminal. But it is commented for logic.
From a terminal/command line, you type the name you gave this script along with a file name with path.
Backed up pupsave files using hotbkp, or dated backup utilities have a format like this:
hotbkp is /mnt/home/pupsave.2fs.BKP-11.10.04_12.30
dated backup is /mnt/home/pupsave-11.10.04_12.30.2fs
other files can be any path/file name.

Here is what I came up with some of which is used in my PupsaveRestore.sh
It also shows that I try to solve a problem step by step.
I called this short script fname.sh and after copying and saving it, you will have to make the file executable.
To run from terminal command line #./fname path/filename

Code:

#! /bin/bash
PUPSAVE_FILE=$1 #Get source file from command line
   FS="$PUPSAVE_FILE" #Give variable shorter name
    LAST=${FS##*/} # Removes Path from filename
#FRST=${LAST%%save*};echo FRST=$FRST
#LST=${LAST##*save};echo LST=$LST
    chk=$(echo ${LAST/BKP})  #Check for "BKP" in source file name and delete in variable chk
    if [ ! "$chk" = "$LAST" ]; then # If chk does not equal LAST, "BKP" existed in name process name
#     chk=$(echo $LAST | grep "BKP")
#     if [ $chk = $LAST ]; then

    newname=`echo $LAST | sed "s/...................$//"` #That is 19 dots in sed Removes date-time
    else newname="$LAST" #If "BKP" did not exist in LAST newname is same as LAST
    fi
EXT1=${LAST##*.} # Get LAST extension
#Check LAST extension and process if one of 2fs,3fs,4fs otherwise pass newname unchanged
if [ $EXT1 = "2fs" ]
 then
   EXT2=.$EXT1
newname=`echo $LAST | sed 's/-.*'$EXT2'/-'$EXT2'/' | sed 's/-//'`
fi
if [ $EXT1 = "3fs" ]
   then
   EXT2=.$EXT1
newname=`echo $LAST | sed 's/-.*'$EXT2'/-'$EXT2'/' | sed 's/-//'`
fi
if [ $EXT1 = "4fs" ]
  then
  EXT2=.$EXT1
newname=`echo $LAST | sed 's/-.*'$EXT2'/-'$EXT2'/' | sed 's/-//'`
fi 
 echo PUPSAVE_FILE = $PUPSAVE_FILE #Show Source file name
echo newname = $newname #Show modified name for copying
echo EXT2 = $EXT2 #Show filename extension of source file in LAST
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 3843

PostPosted: Tue 04 Oct 2011, 17:50    Post subject:  

Code:
BASNAM=${1##*/}
case ${BASNAM} in
*.?fs)EXT=${BASNAM##*.};newname=${BASNAM%.?fs}.$EXT;;
*BKP*)newname=${BASNAM%%.BKP*};;
esac

_________________
Puppy Web Desktop Now with pet packages - Pet Packaging 100 & 101

Last edited by technosaurus on Tue 04 Oct 2011, 19:12; edited 1 time in total
Back to top
View user's profile Send private message 
8-bit


Joined: 03 Apr 2007
Posts: 3012
Location: Oregon

PostPosted: Tue 04 Oct 2011, 18:15    Post subject:  

I know others have ways to improve this code.
I only posted it so others could get an idea of how I try to accomplish solving a problem. And that I am not as proficient at coding as others.

So, posting the code was not a request for improvement of it. It was only to show how I solved a problem.
If one tries the script as written, it works. Sure, a better programmer can improve on it.

I have had some comment that they thought my PupsaveRestore.sh script would allow them to do a HOT restore. If you want a real challenge, tackle that.
Or another asked if it was able to copy multiple files dropped in the source box to a destination directory.
That is another modification one could tackle.
I also know I could have used grub to find a substring in a string being the filename.

But thanks for your snip-it anyway. One never stops learning.

tech...
Adding "#! /bin/bash to your example and trying it gave me an error of : line 6: ${%.?fs}.$EXT: bad substitution

That is if it was supposed to replace the script I posted.
Back to top
View user's profile Send private message 
technosaurus


Joined: 18 May 2008
Posts: 3843

PostPosted: Tue 04 Oct 2011, 19:13    Post subject:  

there should have been a BASNAM before the % - post edited
_________________
Puppy Web Desktop Now with pet packages - Pet Packaging 100 & 101
Back to top
View user's profile Send private message 
8-bit


Joined: 03 Apr 2007
Posts: 3012
Location: Oregon

PostPosted: Tue 04 Oct 2011, 22:02    Post subject:  

Again, thank you technosaurus.
You have shown that different programmers write code as to their ability.
The only thing that was missing from your example to make it fully function like my example was the addition of one last test that would assign the variable newname the contents of BASNAM if it ended up empty after your code ran.
And it would end up empty if a filename that was not a pupsave backup name like "/mnt/home/somefile.txt"
Without that last test the variable newname would end up empty for a copy command of cp $BASNAM $DIR/$newname.
I simplified the example somewhat by not including a destination directory input.

With the addition of a test at the end though, it would function the same as my example with a lot less code.
Of course it relies on some givens.
Those givens are the structure of the pupsave file name and relying on one having "BKP" in the name and the other having a file name extension of "?fs.

Anyway, it shows me things that I again did not know
Also, the right parenthesis without a left I still do not get.
Is it the context it is used in that allows it without a left parenthesis?
Back to top
View user's profile Send private message 
seaside

Joined: 11 Apr 2007
Posts: 832

PostPosted: Tue 04 Oct 2011, 22:47    Post subject:  

8-bit wrote:


Anyway, it shows me things that I again did not know
Also, the right parenthesis without a left I still do not get.
Is it the context it is used in that allows it without a left parenthesis?


8-bit,

As far as I know, the "case statement" is one of the few places where you'll find a right without a left and it seems to suit the situation of providing a nice id ending to the variable.

Regards,
s
(Yes, many ways to do the same thing and we'll never know them all Smile )
Back to top
View user's profile Send private message 
8-bit


Joined: 03 Apr 2007
Posts: 3012
Location: Oregon

PostPosted: Tue 04 Oct 2011, 23:05    Post subject:  

What I find interesting is that I am able to deciper/understand technosaurus's code snip-it as to how it works.

And thanks seaside for the explanation of the parenthesis use with the case command.
Back to top
View user's profile Send private message 
Display posts from previous:   Sort by:   
Page 1 of 1 [7 Posts]  
Post new topic   Reply to topic View previous topic :: View next topic
 Forum index » Off-Topic Area » Programming
Jump to:  

You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group
[ Time: 0.0556s ][ Queries: 12 (0.0037s) ][ GZIP on ]