Reputation: 3
I'm as much as a newbie as one can get and have to turn in my first big assignment. Unfortunately, I am lost. Can anyone please tell me what I'm doing wrong? The menu case statement gets displayed, then the echo in the functions as well, but it doesn't get executed, then jumps back to the menu. Thank you!
#! /bin/bash
adauga() {
printf "Introduceti un numar"
read numar1
printf "Introduceti alt numar"
read numar2
more
let suma=$numar1+$numar2
printf "$numar1 + $numar2 = $suma"
}
factorial () {
n=0
nr=0
fact=1
echo -n "Introduceti numarul: n= "
read n
more
nr=$n
while [ $n -ge 1]
do
fact=`expr $fact \* $n`
n=`expr $n - 1`
done
echo "Factorialul numarului $nr este $fact"
}
conversie () {
n=0
hex=0
echo -n "Introduceti numarul in baza 10: n= "
read n
hex=`echo "obase=16;ibase=10; $n" | bc`
echo "$n in baza 10 este echivalent cu \"$hex\" in baza 16"
return
}
while :
do
clear
echo " meniu"
echo "1. Adunarea a 2 numere"
echo "2. Determinarea factorialului unui numar"
echo "3. Convertirea unui umar din baza 10 in aza 16"
echo "4. Exit"
echo -n "introduceti una din optiunile [1 - 4]"
read opt
$opt in
1) adauga ;;
2) factorial;;
3) conversie;;
4) echo "La revedere $USER";
exit 1;;
*) echo "$opt este o optiune invalida.";
echo "Tasteaza enter pentru a continua .";
read enterKey;;
esac
done
Upvotes: 0
Views: 49
Reputation: 797
I dont see a case keyword for your esac.. im sorry if i am misreading it..i am on mobile 🤗
The case ... esac statement syntax is as below :
case word in
pattern1)
# Statement(s) to be executed if pattern1 matches
;;
pattern2)
# Statement(s) to be executed if pattern2 matches
;;
pattern3)
# Statement(s) to be executed if pattern3 matches
;;
esac
Upvotes: 1
Reputation: 123490
There are 3 major issues:
case
keyword.]
in the while loop condition. Here's the script with these issues highlighted and fixed:
#! /bin/bash
adauga() {
printf "Introduceti un numar"
read numar1
printf "Introduceti alt numar"
read numar2
more
let suma=$numar1+$numar2
printf "$numar1 + $numar2 = $suma"
}
factorial () {
n=0
nr=0
fact=1
echo -n "Introduceti numarul: n= "
read n
more
nr=$n
while [ $n -ge 1 ] # Added space here
do
fact=`expr $fact \* $n`
n=`expr $n - 1`
done
echo "Factorialul numarului $nr este $fact"
}
conversie () {
n=0
hex=0
echo -n "Introduceti numarul in baza 10: n= "
read n
hex=`echo "obase=16;ibase=10; $n" | bc`
echo "$n in baza 10 este echivalent cu \"$hex\" in baza 16"
return
}
while :
do
# Removed 'clear' here to avoid clearing output
echo " meniu"
echo "1. Adunarea a 2 numere"
echo "2. Determinarea factorialului unui numar"
echo "3. Convertirea unui umar din baza 10 in aza 16"
echo "4. Exit"
echo -n "introduceti una din optiunile [1 - 4]"
read opt
case $opt in # Added 'case' here
1) adauga ;;
2) factorial;;
3) conversie;;
4) echo "La revedere $USER";
exit 1;;
*) echo "$opt este o optiune invalida.";
echo "Tasteaza enter pentru a continua .";
read enterKey;;
esac
done
Upvotes: 1