Examples of Bourne shell scripts

1. To read input to a command and process it in some way:

# usage: fsplit file1 file2

   total=0; lost=0
   while read next
   do
   total=`expr $total + 1`
   case "$next" in
   *[A-Za-z]*)  echo "$next" >> $1 ;;
   *[0-9]*)     echo "$next" >> $2 ;;
       		*)           lost=`expr $lost + 1`
   esac
   done
   echo "$total lines read, $lost thrown away"

The user types the command:

   fsplit file1 file2

They then enter lines of text and issue an EOF instruction. The script then processes the lines as follows

A line with at least one letter is appended to file1; any line with at least one digit and no letters is appended to file2. All other lines are thrown away.

2. To read commands from the terminal and process them:

# usage: process sub-directory

   dir=`pwd`
   for i in *
   do
   if test -d $dir/$i
   then
   cd $dir/$i
   while echo ''$i:''
    			read x
    		do
          			eval $x
          		done
    	fi
   done

The user types the command:

   process sub-directory

This script will read and process commands in the named sub-directory. The user is prompted to supply the name of the command to be read in. This command is executed using the the builtin eval function.

3. To create a command:

   flag=
   for i
   do
   case $i in
   -c)   flag=N ;;
    *)   if test -f $i
               	      	then
        				ln $i junk$$; rm junk$$
           		elif test $flag   # true if not null
       			then
                  				echo \'$i\' does not exist
               	else
             				>$i
   fi ;;
   esac
   done

This command takes filenames as its parameters. If a file exists it changes the modification date. If no file exists it creates a new one. This script is similar in action to the touch command.

The -c argument lets you specify that you only want to update a file that already exists and not to create one if it doesn't.


Top document