-1

I'm still learning unix and I need to know if there is a way to perform the following actions.

Is there any way I can echo a read variable, and in the process, dissect it letter by letter, and assign specific commands to every letter? For example, if the regular echoed output would be "cat", how would I make c, a, and t execute different commands? Is this possible?

I have attempted various methods using fold to split the letters up into their own lines. I just need a way to make the letters equal a command.

It would pretty much look like this:

read variable
echo $variable | fold -w 1

Am I on the right track?

nosferatwo
  • 39
  • 1
  • 5
  • 1
    You may want to learn about [option flags](http://wiki.bash-hackers.org/howto/getopts_tutorial). Or else possibly what you want is `command1;command2;command3`. Piping output to `fold` won't *run* commands no matter what, so it's hard to tell what problem you're really trying to solve here. Could you edit your question to add more detail? – Wildcard Apr 03 '16 at 07:28
  • I'm not yet well-versed enough to really elaborate on it at the level you would need me to. I'm trying to make a Morse code translator. What I'm trying to do is create a shell script that can take user input, break down the words by letter, and have the individual letter execute the command to play a wav file of the corresponding morse code. I don't need a full explanation, but just a concept to look into or any good resources you may know. I've seen the code for a version of this project that someone else made, but I don't understand it just yet - I'm too new to this to understand it yet. – nosferatwo Apr 03 '16 at 07:39
  • 1
    Ah, yes, I recall your [other question](http://unix.stackexchange.com/q/273318/135943) about morse code. Honestly, you're just plain using the wrong tool. Shell script is for orchestrating *existing* tools to make them cooperate on a given task. For a whole new special-purpose tool, shell scripting is the wrong language. (Not to say you *can't* do it, but (a) it will be awfully complicated and (b) it won't teach you about what shell scripting is *for*, nor *why* you would ever write something in shell.) – Wildcard Apr 03 '16 at 07:44
  • 1
    See http://unix.stackexchange.com/a/169765/135943 for a further description of what shell scripting *is* for. – Wildcard Apr 03 '16 at 07:47
  • 1
    Thank you for the explanation and the resource. I was looking for either an explanation of how to do it, or a "this isn't very practical, and here is why." I made a very basic text to morse code translator using sed as my first script project (just to get used to vi and scripts in general) and I wanted to see just how far I could take it. Perhaps one day I'll be able to take that awfully complicated path you mentioned and make it work. But for now, I appreciate the advice. Thanks! – nosferatwo Apr 03 '16 at 07:53

1 Answers1

1

In bash 4, you could define the letter/command mapping in an associative array and loop over all letters as follows:

#!/bin/bash

# List of commands
declare -A cmd=(
    ['c']="cmd1" 
    ['a']="cmd2" 
    ['t']="cmd3"
)

# Split entry into letters and execute assigned commands
read variable
for f in `echo $variable | fold -w 1`; do
    ${cmd[$f]}
done
Guido
  • 4,014
  • 13
  • 22