user2453396
user2453396

Reputation:

Incrementing a single number in a history line

So I'm having difficulty figuring this out.

What I am trying to do, is display the most recently entered command

Let's use this as an example:

MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

This command has just been executed. It is contained inside of a shell script. After it is executed, the output is checked in an if..then..else.. statement. If the condition is met, I want it to run the command above, except I want it incremented by one, every time it is ran. For instance:

MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

if test ! $MD5=$HASH  #$HASH is a user defined MD5Hash, it is checking if $MD5 does NOT equal the user's $HASH
  then  #one liner to display the history, to display the most recent
    "MD5=$(cat $DICT | head -1 | tail -1 | md5sum)" #pipe it to remove the column count, then increment the "head -1" to "head -2"
  else echo "The hash is the same."
fi  #I also need this if..then..else statement to run, until the "else" condition is met.

Can anyone help, please and thank you. I'm having a brain fart. I was thinking using sed, or awk to increment. grep to display the most recent of the commands,

So say:

$ history 3

Would output:

1 MD5=$(cat $DICT | head -1 | tail -1 | md5sum)
2 test ! $MD5=$HASH 
3 history 3

-

$ history 3 | grep MD5

Would output:

1 MD5=$(cat $DICT | head -1 | tail -1 | md5sum)

Now I want it to remove the 1, and add a 1 to head's value, and rerun that command. And send that command back through the if..then..else test.

Upvotes: 0

Views: 217

Answers (1)

TrueY
TrueY

Reputation: 7610

UPDATED

If I understood your problem well, this can be a solution:

# Setup test environment
DICT=infile
cat >"$DICT" <<XXX
Kraftwerk
King Crimson
Solaris
After Cyring
XXX

HASH=$(md5sum <<<"After Cyring")

# Process input file and look for match
while read line; do
  md5=$(md5sum<<<"$line")
  ((++count))
  [ "$HASH" == "$md5" ] && echo "The hash is the same. ($count)" && break
done <$DICT

Output:

The hash is the same. (4)

I improved the script a little bit. It spares one more clone(2) and pipe(2) call using md5sum<<<word notation instead of echo word|md5sum.

At first it sets up the test env creating infile and a HASH. Then it reads each line of the input file, creates the MD5 checksum and checks if is matches with HASH. If so it writes some message to stdout and breaks the loop.

IMHO the original problem was a little bit over-thought.

Upvotes: 1

Related Questions