#!/usr/local/bin/bash # # num.sh - little number guessing game for bash # # your enter five numbers and script tells if each number should be # smaller, bigger or if it's right... # # kpn, pepe@kahvipannu.fi # function randomize { for (( i=1; i<6; i++ )) do num[$i]=$[($RANDOM%9)+1] done } function guess { ii=1 echo echo -e " Your guess number $1: " echo -n " " read line for (( i=1; i<6; i++ )) do g[$i]=`echo $line | cut -c $ii` let ii=ii+2 done if [ ${g[1]} ] && [ ${g[2]} ] && [ ${g[3]} ] && [ ${g[4]} ] && [ ${g[5]} ] then if [ ${g[1]} -eq ${g[1]} 2>/dev/null ] && [ ${g[2]} -eq ${g[2]} 2>/dev/null ] && [ ${g[3]} -eq ${g[3]} 2>/dev/null ] && [ ${g[4]} -eq ${g[4]} 2>/dev/null ] && [ ${g[5]} -eq ${g[5]} 2>/dev/null ] then if [ ${g[1]} -eq ${num[1]} ] && [ ${g[2]} -eq ${num[2]} ] && [ ${g[3]} -eq ${num[3]} ] && [ ${g[4]} -eq ${num[4]} ] && [ ${g[5]} -eq ${num[5]} ] then END=$(date +%s) TIME=$(( $END - $START )) echo -e " Congrats! You got it right with guess number $1 and in $TIME seconds. Right numbers are: ${num[1]} ${num[2]} ${num[3]} ${num[4]} ${num[5]} " exit else echo -n " " for (( iii=1; iii<6; iii++ )) do if [ ${g[$iii]} -lt ${num[$iii]} ] then echo -n "+ " fi if [ ${g[$iii]} -gt ${num[$iii]} ] then echo -n "- " fi if [ ${g[$iii]} -eq ${num[$iii]} ] then echo -n "= " fi done fi else echo " ERROR: Only numbers under nine allowed! (example: 1 2 3 4 5)" fi else echo " ERROR: You must give five numbers under nine! (example: 1 2 3 4 5)" fi } function start { echo -e " Try to guess my five number. All numbers between one and nine. After your guess I will tell for each number number if it is right (=), smaller (-) or bigger (+). Then we will see how many guesses you need. guess example: 1 2 3 4 5 " } randomize start START=$(date +%s) for (( guesses=1; guesses<11; guesses++ )) do guess $guesses done END=$(date +%s) TIME=$(( $END - $START )) echo -e " You did not get it right in 10 guesses and $TIME seconds. Better luck next time. Right line this time was: ${num[1]} ${num[2]} ${num[3]} ${num[4]} ${num[5]} "