#!/bin/sh -u # Test #2 sample answer - Script Part II - 88 marks - 13 of 25% #------------------------------------------------------------ # One line summary: look for a program in a tar file fetched from web #------------------------------------------------------------ # Syntax: $0 URL [ program_name ] #------------------------------------------------------------ # Purpose: not required for test # Assignment Label: not required for test #------------------------------------------------------------- # Step 1 - 6 marks PATH=/bin:/usr/bin ; export PATH umask 022 LC_COLLATE=C ; export LC_COLLATE # Step 2 - 9 marks if [ "$#" -lt 1 -o "$#" -gt 2 ]; then echo 1>&2 "$0: expecting URL and optional program name," echo 1>&2 " found $# ($*)" exit 1 fi # Step 3 - 1 mark url="$1" # Step 4 - 12 marks if echo "$url" | grep '^http://' >/dev/null ; then echo "Fetching $url from web..." else echo 1>&2 "$0: URL '$url' is not an http:// URL" exit 2 fi # Step 5 - 2 marks tmp=/tmp/url$$ # Step 6 - 10 marks if ! wget -O "$tmp" "$url" ; then echo 1>&2 "$0: wget of '$url' failed" rm "$tmp" exit 3 fi # Step 7 - 9 marks if [ ! -s "$tmp" ] ; then echo 1>&2 "$0: fetched URL '$url' is empty" rm "$tmp" exit 4 fi # Step 8 - 3 marks chmod ugo-w "$tmp" || exit 5 # Step 9 - 10 marks if file "$tmp" | grep 'tar archive' >/dev/null ; then echo "Looking in tar archive..." else echo 1>&2 "$0: fetched URL '$url' is not a tar archive" exit 6 fi # Step 10 - 7 marks if [ $# -eq 2 ]; then prog="$2" else echo 1>&2 "Enter a program file name:" read prog || exit 7 fi # Step 11 - 10 marks if tar tf "$tmp" | grep "$prog" >/dev/null ; then echo "Program $prog is contained in $url" else echo 1>&2 "$0: Cannot find program '$prog' in URL '$url'" exit 8 fi # Step 12 - 7 marks tar=foo.tar if [ -e "$tar" -a -w .. ] ; then mv "$tar" .. || exit 9 fi # Step 13 - 2 marks mv "$tmp" "$tar" || exit 10