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