First off, the "cut" command does extract ONE field (or several fields, but this is advanced stuff you want to postpone until you grasped the basics) from a line consisting of several such fields. You really should read the man page of "cut". (Tip: if you want to extract several fields one at a time why don't you assign several variables one at a time?)
Secondly, you might want to think over the way you construct a while loop. Given, the way you do it works and it doesn't really make a difference in a 10-line-script, but you write this script to learn something so your concern should not only be to make it work but to learn the most possible from the exercise.
Consider this: when you feed data to a while-loop with a redirection at the end the script is becoming hard to read as the loop becomes longer. The following two loops do the same:
cat /some/file | while read line ; do
...some processing...
done
while read line ; do
...some processing...
done < /some/file
As long as the loop is short there is no problem, but if "...some processing..." consists of 100 lines: then you will start skipping backwards an forwards as you try to read the source code. Writing the input at top of the loop is somewhat easier to understand and therefore to maintain.
A third point: "read" is able to read several values at once - the values are delimited by the "IFS", the "internal field separator". This is the value the shell uses to separate input fields - even command arguments! Per default the IFS is a space character, which is why a line like "command arg1 arg2" will be interpreted as feeding two distinct arguments "arg1" and "arg2" to "command".
Lets do an exmple: Here is a input file, save this to "infile":
a b c
one two three
1 2 3
And here is some code to read this file, save it to a script "read_infile.sh" and execute it:
#! /bin/bash
value1=""
value2=""
value3=""
cat infile | while read value1 value2 value3 ; do
echo "value1 is: $value1"
echo "value2 is: $value2"
echo "value3 is: $value3"
done
That leaves just the problem of changing the IFS to a colon instead of a space. Hint: you can assign it like any variable and example how to do this can be found in this forum, just use the search function.
There is even a fourth point: it pays to analyze what consumes (system) time on running a script. The most time consuming thing is forking new processes. Every time you invoke a command in a script a new process is started and this consumes time. You can read a very enlightening thread where i learned this lesson thanks to cfajohnson and perderabo here.
What does that mean for your script? Well, the line (i have corrected the syntactical error)
log_name="$(echo $inputline | cut -f1 -d:)"
does something which can be done by "parameter expansion" too. Parameter expansion happens completely inside the shell and doesn't need its own process. Have a look at the man page of bash and search for "parameter expansion" to see what i mean.
I hope this helps.
bakunin