#!/usr/bin/env bash # Get the number from the first argument passed number=$1 # Check if input is valid. The input must be a number # - greater than 1 # - smaller than 5000 # I chose this max value of 5000 because nobody would # like to convert a very big number like below: # 15001 = MMMMMMMMMMMMMMMI if ! [[ "$number" =~ ^[0-9]+$ ]] || [ "$number" -lt 1 ] || [ "$number" -gt 5000 ]; then echo "Usage: $0 " exit 1 fi # Arrays of values and corresponding Roman numerals # 1000 = M ; 900 = CM etc. values=(1000 900 500 400 100 90 50 40 10 9 5 4 1) numerals=("M" "CM" "D" "CD" "C" "XC" "L" "XL" "X" "IX" "V" "IV" "I") # Result starts as an empty string. result="" # Roman numerals get appended here using the greedy algorithm for i in "${!values[@]}"; do while [ "$number" -ge "${values[$i]}" ]; do result+="${numerals[$i]}" ((number -= values[$i])) done done # Echo the roman numeral echo "$result"