Shell scripts are often interactive, requesting input in the form of data or parameters directly from the user via the keyboard. All shells have the ability to read input and assign it to shell variables.
In Bourne Shell derivatives, data can be input from the standard input using the read command:
#!/bin/sh -e printf "Please enter the name of an animal: " read animal printf "Please enter an adjective: " read adjective1 printf "Please enter an adjective: " read adjective2 printf "The $adjective1 $adjective2 $animal jumped over the lazy dog.\n"
C shell and T shell use the special symbol $< rather than a command to read input:
#!/bin/csh -ef printf "Please enter the name of an animal: " set animal = "$<" printf "Please enter an adjective: " set adjective1 = "$<" printf "Please enter an adjective: " set adjective2 = "$<" printf "The $adjective1 $adjective2 $animal jumped over the lazy dog.\n"
The $< symbol behaves like a variable, which makes it more flexible than the read command used by Bourne family shells. It can be used anywhere a regular variable can appear.
#!/bin/csh -ef printf "Enter your name: " printf "Hi, $<!\n"
Write a shell script that asks the user to enter their first name and last name, stores each in a separate shell variable, and outputs "Hello, first-name last-name". For example:
Please enter your first name: Barney Please enter your last name: Miller Hello, Barney Miller!
Write a shell script that lists the files in the CWD, asks the user for the name of a file, a source string, and a replacement string, and then shows the file content with all occurrences of the source replaced by the replacement.
shell-prompt: cat fox.txt The quick brown fox jumped over the lazy dog. shell-prompt: ./replace.sh Documents R fox.txt stringy Downloads igv stringy.c File name? fox.txt Source string? fox Replacement string? tortoise The quick brown tortoise jumped over the lazy dog.