Capturing User Input

One of the most important things you can do with your script is prompt a user for input, then capture that user input for your use.

Using the read command to capture user input

Frequently you will need to ask a user for some kind of input. Within a running script, for instance, you may ask for information:

echo "Please enter name of the file to copy."

The user is expected to type in that file name, then press the Enter key. Their input is available to you as long as you capture it immediately:

read filename

Now you can, for instance, echo it back:

echo $filename

Or you can do something with that information:

cp /bin/$filename ~/

It’s important to be clear what filename holds: the name of the file, not the actual file.

You may want to use something that looks more like a system prompt:

echo -n "Enter the name of an animal: "

Note the use of the -n option to prevent a new line after the echo command.

Exercise

Create a script named greeting.sh .

Prompt the user for their name, then greet them.

Run the script using your name.

Now run the script using a pseudo-name with a space in it. What happens?

Introduction to Debugging

During development, you can watch what your script is doing line-by-line by using this syntax:

bash -v scriptname.sh

or

bash -x scriptname.sh

Try them both and note the differences.

Now is the time to test values with spaces in them to make sure your script handles them properly!