所以我已经修改了我的第一个问题,脚本输入但现在无论我输入什么字母,它只添加数字。
这是代码。任何帮助将不胜感激。
#!/bin/bash
add() {
expr $x + $y
}
sub() {
expr $x - $y
}
mult() {
expr $x * $y
}
div() {
expr $x / $y
}
echo "Enter a for add, s for subtract, m for multiply or d for divide and 2 numbers"
read choice x y
if [ $choice=="a" ]
then
add
else
if [ $choice == "s" ]
then
sub
else
if [ $choice == "m" ]
then
mult
else
if [ $choice == "d" ]
then
div
fi
fi
fi
fi
答案 0 :(得分:3)
您似乎希望从第一个和第二个参数($1
和$2
)获取 x 和 y 并阅读操作来自stdin的( a,s,d,m )。
我稍微修改了你的代码,以克服原始脚本中的问题,并根据我的假设提供结果:
#!/bin/bash
# First number.
x=$1
# Second number.
y=$2
# Result of either addition, subtraction, division or multiplication of $x and $y.
result=0
# Reads operation from user.
read -ep "Enter a for add, s for subtract, m for multiply or d for divide: " operation
case $operation in
a) result=$(( x + y ));;
s) result=$(( x - y ));;
d) result=$(( x / y ));;
m) result=$(( x * y ));;
*) printf '%s: %s\n' "$operation" "Unknown operation" >&2; exit 1;;
esac
printf 'result: %s\n' "$result"
用法示例:(脚本名称为 sof.sh )
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: a
result: 9
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: m
result: 20
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: s
result: 1
./sof.sh 5 4
Enter a for add, s for subtract, m for multiply or d for divide: d
result: 1
<强> P.S。强>
请注意以下事项:
expr
是古代shell代码中用来进行数学运算的程序。在像bash这样的POSIX shell中,使用$(( expression ))
。在bash,ksh88 +,mksh / pdksh或zsh中,您还可以使用(( expression ))
或'let
表达”。[[
是一个类似于[
命令(但功能更强大)的bash关键字。见Bash FAQ和Test and conditionals。
除非您是为POSIX sh编写的,否则建议使用[[
。答案 1 :(得分:2)
首先,您希望脚本为read the values from the standard input,但您正在从参数中恢复它。
第二个,您没有将参数传递给函数。
第三个,你没有在函数中使用参数。
第四,在使用 expr 时,您不会在运算符之间留出空格。
注意: Rany Albeg Wein 注意到此bash guide已过时,他建议this one。我还推荐GNU official guide(other formats)。
因此,假设您要使用像./my-script.sh m 2 3
这样的脚本,这是您的代码,但正在运行:
#!/bin/bash
add() {
expr $1 + $2
}
sub() {
expr $1 - $2
}
mult() {
expr $1 \* $2
}
div() {
expr $1 / $2
}
echo "Enter a for add, s for subtract, m for multiply or d for divide and 2 numbers"
x=$2
y=$3
if [ $1 == "a" ]
then
add $x $y
else
if [ $1 == "s" ]
then
sub $x $y
else
if [ $1 == "m" ]
then
mult $x $y
else
if [ $1 == "d" ]
then
div $x $y
fi
fi
fi
fi
最后,这是您的脚本最低限度修改为read the data from the standard input:
#!/bin/bash
add() {
echo "Result:"
expr $1 + $2
}
sub() {
echo "Result:"
expr $1 - $2
}
mult() {
echo "Result:"
expr $1 \* $2
}
div() {
echo "Result:"
expr $1 / $2
}
echo "Enter a for add, s for subtract, m for multiply or d for divide and 2 numbers"
read operation
echo "Read first parameter"
read x
echo "Read second parameter"
read y
if [ $operation == "a" ]
then
add $x $y
else
if [ $operation == "s" ]
then
sub $x $y
else
if [ $operation == "m" ]
then
mult $x $y
else
if [ $operation == "d" ]
then
div $x $y
fi
fi
fi
fi
此外,如果您遇到麻烦,可以在脚本的开头设置#!/bin/bash -xv
的脚本中添加调试消息。