caesar.sh 548 B

1234567891011121314151617181920212223242526
  1. number=13
  2. while getopts n: opt; do
  3. case $opt in
  4. n) number=${OPTARG};;
  5. ?) exit 1;;
  6. esac
  7. done
  8. shift $((OPTIND - 1))
  9. if [ $# -ne 0 ]; then
  10. printf 'usage: %s [-n number]\n' "$0"
  11. printf '\t-n the number of characters to rotate (default 13)\n'
  12. exit 1
  13. fi
  14. number=$((number % 26))
  15. A=$(printf '%d' 0$(printf '%o' \"A\"))
  16. FROM=$(printf '%o' $((A + number)))
  17. THRU=$(printf '%o' $((A + number - 1)))
  18. TRUPPER=$(printf '%b-ZA-%b\n' "\0${FROM}" "\0${THRU}")
  19. trlower=$(echo $TRUPPER | tr [[:upper:]] [[:lower:]])
  20. exec tr "A-Za-z" "${TRUPPER}${trlower}"