Help with bash script.

Posted on 1999-01-03
Medium Priority
Last Modified: 2013-12-26
If I use the program cda I can do a:
cda -dev /dev/cdrom on
cda -dev /dev/cdrom toc

and get the output:

Disc ID: rock 910f850b
Ulf Lundell / Maria Kom Tillbaka - Live - Cd 3

 01 05:59  Laglvs
 02 05:48  Evangeline
 03 04:41  Rom i regnet
 04 05:28  Ute pe vdgen igen
 05 06:30  Dansa nu
 06 04:58  Oh la la
 07 07:24  67
 08 03:17  Min vandrande vdn
 09 10:43  Isabella
 10 06:13  Leng vdg hem
 11 05:12  Maria kom tilllbaka

Total Time: 66:15

How can I make a script that take the trac-names and put them into variabels.
I mean that the variable track01 shall be laglvs and track11 Maria kom tillbaka.

How can I solve this in bash?
Question by:n94magho
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
  • 2

Accepted Solution

hollandb earned 1400 total points
ID: 1295098
I have created a bash script that uses one external program: 'expr', the rest is totally bash.  Note that the variables only exist for the process (child) - they are lost when the script ends hence the parent does not have access to the variables.

This script reads from ./track_titles.txt, but will read from standard input be default if the filename is removed.

It reads a whole line at a time and breaks it up into three variables (track_num, track_time, track_title) using the space as a separator.  If there are more than two spaces, the rest of the line is automatically put into the third variable, in this case 'track_title'.  It then checks to see if the length of the track_num is two(2) characters.  If it is not, it ignores the whole line and continues with the next line.  If it is, it assigns 'trackXX=<track title>' and exports the variable.  I have issued a set command at the end of the script to prove that variables are actually exported.

# Allow input of track names and extract and print them.

while read track_num track_time track_title
        if [ `expr length "$track_num"` -eq 2 ]
                echo $track_num $track_title;
                export track$track_num=$track_title
done < './track_titles.txt'


Author Comment

ID: 1295099

Author Comment

ID: 1295100
Hmmmmm.... one comment...

How can I print the trackXX variables so I ven se that they hold the right value.... It seems to me that soemthing is wrong.

Expert Comment

ID: 1295101
I have played around with this a bit more and I think you will be happy with what I have come up with.
I have changed the script quite considerably and it doesn't use "expr", instead it uses a built in feature of bash to determine the length of a variable/array.  The code should be self-explanatory:

# Allow input of track names and extract and print them.

# declare an array called 'titles':
declare -a titles;
declare -i index=1;

while read track_num track_time track_title
        # ${#VAR} uses the builtin capabilities of bash
        # to determine "the length of 'VAR'":
        if [ ${#track_num} -eq 2 ]
                let index=$index+1;
done < './track_titles.txt'

# titles[@] means "the whole array";
# ${#titles[@]} means "the number of elements in the array".
# in this case, index = number of tracks.

# print song titles backwards to prove they can be accessed
# by using the appropriate subscript:
while [ $index -gt 0 ]
        echo track$index=${titles[$index]};
        let index=$index-1;


Featured Post

On Demand Webinar: Networking for the Cloud Era

Ready to improve network connectivity? Watch this webinar to learn how SD-WANs and a one-click instant connect tool can boost provisions, deployment, and management of your cloud connection.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

This is to be the first in a series of articles demonstrating the development of a complete windows based application using the MFC classes.  I’ll try to keep each article focused on one (or a couple) of the tasks that one may meet.   Introductio…
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…

765 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question