#!/bin/bash shopt -s extglob declare -a stack while read line; do [[ "$line" ]] || exit 0 stack=( ) line=${line//\\*/×} for token in ${line//\//÷}; do case $token in [÷×+-]) if [[ ${#stack[@]} -gt 1 ]]; then op=${token/÷//}; op=${op/×/*} result=$((${stack[1]} $op ${stack[0]})) stack=( $result ${stack[@]:2} ) else echo "Stack underflow" fi ;; ?(-)+([[:digit:]])) stack=( $token ${stack[@]} ) ;; *) echo "Bad operator: $token" esac done [[ ${#stack[@]} -gt 0 ]] \ && echo ${stack[$((${#stack[@]}-1))]} done