getopts помогает разбирать аргументы на флаги, используется вместе с конструкцией case:

#!/bin/sh
usage() { echo "$0 [-s <45|90>] [-p <string>]" 1>&2; }
while getopts ":s:p:" o; do
    case "${o}" in
        s)
            s=${OPTARG}
            [ $s -eq 45 -o $s -eq 90 ] || usage
            ;;
        p)
            p=${OPTARG}
            ;;
        *)
            usage
            ;;
    esac
done
shift $((OPTIND-1))
if [ -z "${s}" ] || [ -z "${p}" ]; then usage fi