if/elif help

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!

  1. The problem statement, all variables and given/known data:
    This is my problem for the class.

Write a script that asks for the user's age. If it is equal to or higher than 16, print a message saying that
this user is allowed to drink alcohol. If the user's age is below 16, print a message telling the user how
many years he or she has to wait before legally being allowed to drink.
As an extra, calculate how much beer an 18+ user has drunk statistically (100 liters/year) and print
this information for the user.

I can make it do the if older than 16 then you can drink
Also If you are 15 or younger than you have to wait X years until you can drink

My problem id with the calculation of how many liters you have drank since 18+.

  1. Relevant commands, code, scripts, algorithms:
    if/elif commands

  2. The attempts at a solution (include all code and scripts):

#!/bin/bash

year=100

echo "Hello, "$USER".  This script will see if your old enough for a beer."

echo -n "Enter your age and press [ENTER]: "
read age

if  [ $age -gt 15 ]; then
  echo "You are ready for a beer!" 
  myvar2=$(expr $age + $year ) < --This is the problem
  echo "You have drank $year liters/year since you were 18 year old."
  exit 1
elif [ $age -lt 16 ]; then
  myvar=$(expr 16 - $age)
  echo "You still have to wait $myvar more years to drink sorry."
  exit 1
  
fi
  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):
    Oklahoma State Institute of Technology
    Okmulgee, Oklahoma
    USA
    Professor Fil Guinn
    ITD 2313-SCRIPT PROGRAMMING-SEC LECNT1

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

myvar2=$(( $age + $year ))

... but if you don't use $myvar2 anywhere else in your script, then calculating it is useless .

$ inside a (( )) block is redundant. So are mathematical assignments outside it.

((myvar2=age+year))

most times your are right.but some older version of sh(like ash , that is usually not Posix compliant on many systems) your syntax is invalid.
[[ *maybe it is various of evulation expression bug of a ash.]]
(so its meant some older versions of (bourne) sh(s) like (0.38) has it, and i cannot test newer version ash(0.4 or newer if there is) so ash is not compability to SUSv3.

actually aritmetic expansion is defined for SUSv3
`Arithmetic Precision and Operations`
in Introduction
`2.6.4 Arithmetic Expansion`
in Shell Command Language]

now lets look at the belows..
[not expanded values before aritmetic expression]

# a=2;b=1;echo $((a+b))  
arith: syntax error: "a+b"

it is required a `$` before variables

# a=2;b=1;echo $(($a+$b))  
3

in sh another interesting issue

# unset x
# x=1

--try 1

# echo $(( $x=5 ))  
arith: syntax error: " 1=5 "

--try 2

# echo $(( $x=5 ))   
arith: syntax error: " 1=5 " 

--try 3 is like OK , but?

# echo $(( $x=5 ))
5

but is not.

# echo $x
1

regards
ygemici

Try removing the $ from the x. It evaluates into 1=5, which naturally doesn't work.

You guys are conflating two different POSIX shell mechanisms here. One is the arithmetic expansion and the other is command expansion. These are different.

$(()) denotes arithmetic expansion, and $() denotes command expansion.

Shells that support $() or $(()) generally support both. For older shells that do not support these syntaxes, you need to use backticks (`) for command expansion and arithmetic expansion isn't supported. In arithmetic expansion, Corona rightly reports that you do not need $ to expand variables; however, you do need this in command expansion. For example:

$ x=1
$ y=2
$ echo $((x+y))
3

However:

$ echo $(x+y)
x+y: command not found

OTOH, if we give it an expr command:

$ echo $(expr x + y)
expr: non-numeric argument

We need explicit variable expansion:

$ echo $(expr $x + $y)

BTW, if we want compatibility with older shells that do not support arithmetic expansion, we generally are not going to be able to use new-style command expansion, so we want something like this, instead:

$ echo `expr $x + $y`
3

we dont conflating anything.we are talking just arithmetic expansion about all shell variants.
I was referring to mentioned syntax of "$((x+y))" expression gives error on the some older shells..
In addition, I mentioned what i identified a issue that is maybe a bug in ash.
because of it(false statement) does not give any error at try of 3rd.

regards
ygemici