Bash 如何在UNIX中执行算术?

Bash 如何在UNIX中执行算术?,bash,unix,Bash,Unix,我试图在UNIX中构建一个非常基本的4函数算术脚本,但它不喜欢我的算术语句。我试图使用“bash算术”语法 从这个来源 另外,当您在UNIX中引用变量时,请注意何时需要使用“$”符号,何时不需要 #!/bin/bash str1="add" str2="sub" str3="div" str4="mult" ((int3=0)) ((int2=0)) ((int1=0)) clear read -p "please enter the first integer" $int1 clea

我试图在UNIX中构建一个非常基本的4函数算术脚本,但它不喜欢我的算术语句。我试图使用“bash算术”语法

从这个来源

另外,当您在UNIX中引用变量时,请注意何时需要使用“$”符号,何时不需要

#!/bin/bash

str1="add"
str2="sub"
str3="div"
str4="mult"

((int3=0))
((int2=0))
((int1=0))


clear
read -p "please enter the first integer" $int1
clear
read -p "Please enter mathmatical operator'" input
clear
read -p "Please enter the second integer" $int2


if [ "$input" = "$str1" ];
then

((int3 = int1+int2))
   echo "$int3"


else

   echo "sadly, it does not work"

fi;

使用
bc
命令

像这样的


echo“9/3+12”| bc

需要变量值时,可以使用
$
<代码>读取,但需要变量的名称:

read -p "..." int1
(从技术上讲,你可以这样做

name=int1
read -p "..." "$name"

设置
int1
的值,因为shell将
name
扩展为字符串
int1
,该字符串
读取
,然后用作名称。)

这里有一个简单的例子:

op=( add sub div mult )

int1=0
int2=0
ans=0

clear
read -p "please enter the first integer > " int1
clear
IFS='/'
read -p "Please enter mathmatical operator (${op[*]})> " input
unset IFS
clear
read -p "Please enter the second integer > " int2

case "$input" in
    add)  (( ans = int1 + int2 ));;
    sub)  (( ans = int1 - int2 ));;
    div)  (( ans = int1 / int2 ));; # returns truncated value and might want to check int2 != 0
    mult) (( ans = int1 * int2 ));;
    *)   echo "Invalid choice"
           exit 1;;
esac

echo "Answer is: $ans"
您还需要检查用户是否向另一个输入了数字:)

declare -A oper
oper=([add]='+' [sub]='-' [div]='/' [mul]='*')

read -r -p 'Num1? > ' num1
read -r -p "oper? (${!oper[*]}) > " op
read -r -p 'Num2? > ' num2

[[ -n "${oper[$op]}" ]] || { echo "Err: unknown operation $op" >&2 ; exit 1; }
res=$(bc -l <<< "$num1 ${oper[$op]} $num2")
echo "$num1 ${oper[$op]} $num2 = $res"
declare-A操作
oper=([add]='+'[sub]='-'[div]='/'[mul]='*'))
读-r-p'Num1?>'num1
阅读-r-p“oper”(${!oper[*]})>”op
读-r-p'Num2?>'num2
[[-n“${oper[$op]}”]|{echo”错误:未知操作$op”>&2;退出1;}

res=$(bc-l我想这就是你想要的:

#!/bin/bash

str1="add"
str2="sub"
str3="div"
str4="mult"

((int3=0)) # maybe you can explain me in comments why you need a arithmetic expression here to perform an simple assignment?
((int2=0))
((int1=0))

echo -n "please enter the first integer > "
read int1
echo -n "Please enter mathmatical operator > "
read input
echo -n "Please enter the second integer > "
read int2


if [ $input = $str1 ]
then
((int3=int1 + int2))
   echo "$int3"
else
   echo "sadly, it does not work"
fi

exec $SHELL
您应该明确地签出
manbash
。其中记录了您需要在哪个命令中指定
$
或不引用变量。除此之外:

var=123 # variable assignment. no spaces in between
echo $var # fetches/references the value of var. Or in other words $var gets substituted by it's value.

很好的反馈,我已经从变量中删除了teh bash符号,但是我仍然得到了一个错误execution@JonathanDeal:哪个错误?您所说的“bash符号”是什么意思。
$
应被视为一元运算符,用于给出变量的值。可能重复