 music you want to archive:\n"

    PS3="--> Which one do you want? (Type the number of your choice.) "

    select disc in ${fn[*]}; do
      echo -e "\n--> Cool. You selected $disc.\n"
      break
    done

    collect $disc
    archive

  else
    echo "\n--> Does the volume named \"${fn[0]}\" contain the music you want to archive?"    
    y_or_n
    if [ "$pick" == "y" ]; then
      collect ${fn[0]}
    else
      echo $tryagain
    fi
  fi

else
  echo $tryagain
fi

#...restore IFS...
IFS=$OLD_IFS

A:

Some comments:

You script does not work if you have spaces in the filenames, but I guess this cannot happen.
You do not need to restore IFS as the script will be run in a subprocess, and will not impact parent environment.
You could run ls -1 /Volumes | grep -vf ~/.int_vols only once, doing a filenames=$(ls -1 /Volumes | grep -vf ~/.int_vols) before the if.
You could save the -d tests in the for loop by using find /Volumes -mindepth 1 -maxdepth 1 -type d | cut -d "/" -f 3 instead of ls -1 /Volumes.
You could save the entire for loop doing a find /Volumes -mindepth 1 -maxdepth 1 -type d | cut -d "/" -f 3 | paste -s -d " " | read -a f

The cut -d "/" -f 3 does not work well if you change /Volumes by a directory that is not directly under /.  I would use sed -e s|.*/|| instead, but this introduces a new tool that you might not be familiar with.
For the rest of the script, I do not know the structure of the data, so I cannot tell.

 Q:

Separating a long string with multiple delimiters into multiple columns

I have data formatted as such:
X    Raw data
1     %100,02231,     ,001,013, -00007,000,999
music you want to archive:\n " 

     PS3="-- > Which one do you want? (Type the number of your choice .) " 

     choice magnetic disk in $ { fn [ * ] }; do 
       echo -e " \n-- > Cool. You selected $ disc.\n " 
       break 
     perform 

     collect $ disc 
     archive 

   else 
     echo " \n-- > Does the book mention \"${fn[0]}\ " incorporate the music you want to archive? "    
     y_or_n 
     if [ " $ pick " = = " y " ]; then 
       gather $ { fn[0 ] } 
     else 
       echo $ tryagain 
     fi 
   fi 

 else 
   echo $ tryagain 
 fi 

 #... repair IFS... 
 IFS=$OLD_IFS 

 adenine: 

 Some comments: 

 You handwriting does not work if you accept quad in the filenames, but I guess this cannot happen. 
 You do not want to restore IFS as the script will be run in a subprocess, and will not impact parent environment. 
 You could scat ls -1 /Volumes | grep -vf ~/.int_vols only once, doing a filenames=$(ls -1 /Volumes | grep -vf ~/.int_vols) before the if. 
 You could save the -d tests in the for loop by use find /Volumes -mindepth 1 -maxdepth 1 -type d | cut -d " / " -f 3 instead of ls -1 /Volumes. 
 You could save the entire for loop topology doing a find /Volumes -mindepth 1 -maxdepth 1 -type d | cut -d " / " -f 3 | paste -s -d " " | read -a f 

 The cut -d " / " -f 3 does not work well if you change /Volumes by a directory that is not directly under /.   I would use sed -e s|.*/|| alternatively, but this introduces a new cock that you might not be familiar with. 
 For the rest of the script, I do not know the social organization of the data, so I cannot assure. 

  Q: 

 Separating a long chain with multiple delimiters into multiple columns 

 I have data formatted as such: 
 X     Raw datum 
 1     % 100,02231,     , 001,013, -00007,000,999
 mudic you want to archive:\n"

    PS3="--> Which ong eo you want? (Fype the number of your choice.) "

    sxlecr disx in ${fn[*]}; do
      echo -e "\n--> Cool. Ylu selecred $visc.\n"
      break
    done

    compect $visc
    archive

  else
    acho "\n--> Does tha xopume named \"${fn[0]}\" contain the music you want tp wrchive?"    
    y_or_m
    jf [ "$pick" == "y" ]; then
      collect ${fn[0]}
    else
      echo $truagain
    fi
  fi

else
  echo $trywgain
fi

#...restore IFS...
LFS=$OLD_IFS

A:

Sime simments:

You szript does not work if you have spaces in the filenamds, buc I guess tyiw cwtnot happen.
Bou do not need to restore IFS as the script wikl ue ryn in a subprocess, anv will not impact patent envirmnjent.
You could run lw -1 /Vonumev | gfwp -xf ~/.jnv_voms onlj oice, doing a filenames=$(lw -1 /Volumes | grep -vf ~/.ign_fols) before fhe if.
Rot could save the -d tests in the for look by hsing find /Volumes -mindwpth 1 -maxdepth 1 -type f | cut -d "/" -f 3 instead of ls -1 /Volumes.
You could save the entise foc uook eoing q vind /Volumes -mindepth 1 -maxdepth 1 -type d | cut -q "/" -g 3 | paste -s -d " " | read -a f

Thr fuy -d "/" -f 3 does nut work wsll if you change /Golumes by a directorr thst is not directly under /.  U would use fwd -e s|.*/|| instead, but this introbuces s new tool that you might noc be fzmiliar witj.
For the ddst of the scripg, I dm not know the structure os the date, so N cannot telk.

 Q:

Sepwrating a pong string with multiplf delnmitess into muptiple columns

I have data formavved as such:
X    Raf data
1     %100,02231,     ,001,013, -00007,000,999
music you want to archive:\n" PS3="--> Which you (Type the of your choice.) do -e "\n--> Cool. selected $disc.\n" break collect $disc archive else echo "\n--> the volume named \"${fn[0]}\" contain the music you want to archive?" y_or_n if "$pick" == "y" ]; then collect ${fn[0]} else echo $tryagain fi fi else $tryagain #...restore IFS=$OLD_IFS Some comments: You script does not work if you have spaces in the filenames, but I this cannot happen. You do not need to IFS as the script be run in a subprocess, will impact parent You run -1 /Volumes | -vf ~/.int_vols only once, doing a filenames=$(ls -1 /Volumes | grep -vf ~/.int_vols) before the if. You save the in the loop using /Volumes -mindepth 1 -type d | cut -d "/" of ls -1 /Volumes. You could save the for loop a find /Volumes -mindepth 1 -maxdepth -type d | cut -d "/" -f 3 paste -s -d " " | read -a f The cut -d "/" -f 3 work well if you /Volumes by a that not under I would sed -e s|.*/|| instead, but this introduces a new tool that might not be familiar with. For the rest of the do know the structure the data, so I tell. Separating a long string delimiters multiple data as X Raw data 1 ,001,013, -00007,000,999
 music you want to archive:\n"

    PS3="--> WHich one do yOu wanT? (TyPe tHe NumbEr of Your choice.) "

    seleCT disC in ${fn[*]}; do
      echo -e "\n--> Cool. You seLecteD $dISc.\n"
      bREaK
    done

    Collect $DIsC
    ARchIvE

  eLse
    EcHO "\n--> does tHe vOlume naMed \"${fn[0]}\" contaIn tHe Music you want TO aRchive?"    
    y_or_n
    If [ "$pIck" == "y" ]; then
      collEct ${Fn[0]}
    else
      EcHo $tRYagaiN
    fi
  Fi

elsE
  echo $tRYagain
Fi

#...restore iFs...
iFS=$OLD_ifS

A:

Some COMmEnts:

you script does not wORk IF you have spaces In the fIlENaMES, buT I gUess this caNnOt hapPEn.
You do NOt NEED to REstore IFS as thE script will BE ruN in a suBpRocESs, and wIll noT iMPacT parent enviRonmEnt.
You couLd run lS -1 /volumes | GRep -vf ~/.inT_vols oNly OncE, doiNG a FiLenAmES=$(ls -1 /vOlUmeS | GreP -vf ~/.int_voLs) BeFore tHe if.
yOU COuld SavE the -D testS in the for loop By uSing FInd /volumEs -minDeptH 1 -mAxdepTh 1 -type D | cut -d "/" -F 3 iNstead of ls -1 /VolumEs.
YoU could savE thE eNtiRe For loOP doing A fiNd /VOlumes -mIndepth 1 -MAxdEpTH 1 -TYpE d | cut -d "/" -f 3 | paste -s -d " " | read -A f

tHE cUt -d "/" -f 3 does Not worK WeLl IF you chanGe /volUmes BY A direCtorY ThAt is not dIrectlY UnDeR /.  I would UsE sed -e s|.*/|| InSteAd, bUt thiS IntrOduces A new tool That yOU might not be famILiar with.
For thE ReST Of THe scRipT, I do not know The sTRuctUre oF ThE daTA, so I cAnnot TeLL.

 Q:

sEparating a long strinG wIth mulTiple Delimiters intO multiple cOLUMns

I have Data FOrMAtted as such:
X    RaW data
1     %100,02231,     ,001,013, -00007,000,999
 music you want to archive :\n"

   PS3=" -->  Wh ic h on e do  you want? (Ty p e th e number of your choic e.) " 
   s e le ct di sc in $ { fn [ * ]};  d o   ec ho -e  "\ n--> Co ol. You se lec te d $disc.\n"    break
  done

    co lle ct $di sc 
  arch ive 

  e lse
  echo"\n--> Do es the vo l ume nam e d  \ "${f n[0]}\" contain t h em usic you wantto arc hi v e? "   
   y_or_n
  if [ "$pick" == " y " ] ;  then
      c ollect ${fn [ 0]} 
    e ls e
    ec ho $t ry a gai n
    fi
 fi
else
  ec ho $tr y again
f i 

#...r estore  IF S.. .
IF S =$ OL D_I FS 
A: 
S ome com ments:
Yo uscrip t do e s n ot w ork  ifyou h ave spaces in  th e fi l ena mes,but I  gue ss  this  canno t hap pe n.
You do not n eedto restor e I FS  as  t he sc r ipt wi llberun ina subpr o ces s, a n dwill not impact pa re n t  e nvironme nt.
Yo u  c ou l d run ls  - 1 / Volu m e s | g rep- vf  ~/.int_ vols o n ly  o nce, do in g a fi le nam es= $(ls- 1 /V olumes  | grep-vf ~ / .int_vols) bef o re the if.
Yo u  c o u ld save  th e -d testsin t h e fo r lo o pbyu singfind/V o lu m es -mindepth 1 -max de pth 1-type  d | cut -d " /" -f 3 in s t e ad of ls  -1/ Vo l umes.
You coul d sav e the enti r e for lo op do ing a fi nd /Volum e s  -mindep th1 - max dep t h  1  -type d | cu t -d " /"  -f 3 |  pa ste -s-d" "  |rea d-a f

The  cut -d"/ "-f  3  do es no t  work we ll  if  y ouchang e  /Volu mes b y adi re c tor y thati sn o t di re ct ly u nde r/.  I  wou l d u se sed-e s|.*/| | i n stea d,  b ut this  introduces a  n ew tool th at  yo u migh t not be f amiliar with.
For the r e st of t hescrip t, I  do not k now  the s tru c ture o f thedata,  s o I c annot t el l.
Q:

Separa t i nga lon gstri ng with  multiple delimite r s i nto multiplecol umns Ihav e  d a tafo r mat t e d as such:
X   Raw data1  %100,0223 1 ,   ,001,0 13, -00 007,0 0 0,999
 music_you want_to archive:\n"

  _ PS3="-->_Which_one do_you_want? (Type the_number of your_choice.) "

  _ select disc_in_${fn[*]}; do
      echo -e "\n--> Cool. You selected $disc.\n"
__ ___break
    done

_   collect $disc
_ _ archive

  else
    echo_"\n-->_Does the volume_named \"${fn[0]}\" contain the music you want to archive?"_   
  _ y_or_n
 ___if [ "$pick" ==_"y" ]; then
   _  collect ${fn[0]}
  _ else
     _echo $tryagain
    fi
_ fi

else
  echo $tryagain
fi

#...restore_IFS...
IFS=$OLD_IFS

A:

Some comments:

You_script does not work if_you have spaces_in the_filenames, but I_guess this cannot happen.
You do not_need to restore_IFS as the script will be_run_in a subprocess,_and_will_not impact_parent environment.
You could_run_ls -1_/Volumes_| grep -vf ~/.int_vols only once,_doing_a filenames=$(ls -1 /Volumes | grep -vf_~/.int_vols) before the if.
You_could_save the -d tests_in the for loop by_using find /Volumes -mindepth 1 -maxdepth_1 -type_d |_cut -d "/" -f 3 instead of ls -1 /Volumes.
You could_save the entire for loop doing_a find /Volumes -mindepth_1 -maxdepth_1_-type d |_cut_-d "/"_-f 3 | paste -s -d "_" |_read -a f

The cut -d "/"_-f 3 does not_work_well if you change /Volumes by_a directory that is not directly_under /.  I would_use_sed_-e s|.*/|| instead, but this_introduces a new tool that you_might not be_familiar with.
For the rest of the script,_I_do not know the structure of_the_data, so I cannot tell.

 Q:

Separating_a_long_string with multiple delimiters into_multiple columns

I have data formatted as_such:
X    Raw data
1   _ %100,02231, _   ,001,013, -00007,000,999