# Writing Shell Scripts¶

Shell scripts are executable files that contain shell commands. The shell exececutes the commands in order, just as if you had typed them into the command line. Shell scripts usually contain special syntax that enables them to do things conditionally and in loops. This week we’ll start working with shell scripts.

## Your First Script¶

Use your favorite editor to copy-and-paste this simple shell script:

#!/bin/bash

echo
echo "==> Entering child process <=="
ps -f
echo "==> showing variables in child <=="
echo "   roses are $roses" echo " violets are$violets"
echo "==> setting variables in child <=="
roses=black
violets=orange
echo "   roses are $roses" echo " violets are$violets"
echo "==> Leaving child process <=="
echo


Make the script executable and put the it into your ~/work directory to start with. You can run it from ~/work with the following command:

$./flowers  You can also run the script these ways: $ source ./flowers
$. ./flowers$ exec ./flowers


What’s the difference between them?

Moving it into ~/bin puts it into the $PATH. How does that change how you execute the file? ## Taking Input¶ Scripts are more useful if they change what they do based on input. There are two ways to get input from the user, interactively by prompting them or from the command line. Add these two lines to your flowers script before the first echo and after the #! or “shebang” line. echo "What are roses?" read roses echo "What are violets?" read violets  How rerun your script. What changed? When you’re happy that your script is taking inptut comment out those lines by placing a # hash mark in front of them so they look like this: #echo "What are roses?" #read roses #echo "What are violets?" #read violets  Under those lines use the $1 and $2 special variables to set roses and violets equal to command line options: roses=$1
violets=\$2


Now your flowers program takes command line arguments.