Help with bash script.

Posted on 1999-01-03
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 350 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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
ORA-01403: no data found 43 112
format the code in java 6 109
Fibonacci challenge 11 136
Capture logon name 13 104
Introduction: Ownerdraw of the grid button.  A singleton class implentation and usage. Continuing from the fifth article about sudoku.   Open the project in visual studio. Go to the class view – CGridButton should be visible as a class.  R…
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.
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

749 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