我正在从Linux Foundation LFS101x.2的一部分中学习Bash Shell脚本,并且有一个实验室来创建一个简单的Bash计算器。
该实验室的详细信息位于:
Lab 5

我正在尝试通过以下方式运行脚本:

$ ./bashShellScriptingLab5.sh s 15 5

错误消息是:
Welcome to Calculator!
./bashShellScriptingLab5.sh: line 39: syntax error near unexpected token `exit'
./bashShellScriptingLab5.sh: line 39: ` exit 0'

这是我的bashShellScriptingLab5.sh:
#!/bin/bash

echo "Welcome to Calculator!"

if [ $# != 3 ];
then
        echo "Usage:"
        echo "Please enter a/s/m/d and two integers"
        exit 1
fi

addition () {
        echo "The result of adding " + $2 + " and " + $3 + " is:"
        d = expr $2 + $3
        echo $d
}

subtraction () {
        echo "The result of subtracting " + $2 + " and " + $3 + " is:"
        d = expr $2 - $3
        echo $d
}

multiplication () {
        echo "The result of multiply " + $2 + " and " + $3 + " is:"
        d = expr $2 * $3
        echo $d
}

division () {
        echo "The result of dividing " + $2 + " and " + $3 + " is:"
        d = expr $2 / $3
        echo $d
}

if [[ "$1" = "a" ]]
then
        addition()
        exit 0
elif [[ "$1" = "s" ]]
then
        subtraction()
        exit 0
elif [[ "$1" = "m" ]]
then
        subtraction()
        exit 0
elif [[ "$1" = "d" ]]
then
        division()
        exit 0
else
        echo "Usage:"
        echo "Please enter a/s/m/d and two integers"
        exit 1
fi

最佳答案

在这里退出一些错误,我将遍历它们,然后显示一个工作脚本示例。
首先,您似乎对功能如何工作做出了一些假设。
调用函数不需要()

addition()
另外,您正在尝试在函数中使用全局位置参数,因为它们具有自己的位置,因此将无法正常工作,因此对函数的调用应传递您想要的
addition $2 $3
考虑到这一点,函数的内部也将不得不改变
echo "The result of adding " + $1 + " and " + $2 + " is:"
如您所见,我们现在使用$ 1和$ 2,就像我们使用函数的第一个和第二个参数一样,而不是脚本!

函数内部没有其他问题
d = expr $2 + $3
空格在bash中具有用途,因此会干扰=符号。该命令读为d(function/file/script/exe/whatever),然后equals是此参数。因此,在=和两侧之间不能有空格,因此应写成
d=expr $2 + $3
尽管由于expr之后的空格仍然会导致编译错误,所以我们将需要在子shell中运行它以将其分配给d
d=$(expr $2 + $3)
虽然就我个人而言,我只是去进行bash算法
d=$(($2 + $3))
因此,如果您在脚本中更改所有这些选项,它应该可以工作,可以多花点功夫,但时间用完了。

工作代码
#!/bin/bash

echo "Welcome to Calculator!"

if [ $# != 3 ];
then
        echo "Usage:"
        echo "Please enter a/s/m/d and two integers"
        exit 1
fi

addition () {
        echo "The result of adding " + $1 + " and " + $2 + " is:"
        d=$(($1 + $2))
        echo $d
}

subtraction () {
        echo "The result of subtracting " + $2 + " and " + $3 + " is:"
        d=$(($1-$2))
        echo $d
}

multiplication () {
        echo "The result of multiply " + $1 + " and " + $2 + " is:"
        d=$(($1*$2))
        echo $d
}

division () {
        echo "The result of dividing " + $1 + " and " + $2 + " is:"
        d=$(($1/$2))
        echo $d
}

if [[ "$1" = "a" ]]
then
        addition $2 $3
        exit 0
elif [[ "$1" = "s" ]]
then
        subtraction $2 $3
        exit 0
elif [[ "$1" = "m" ]]
then
        multiplication $2 $3
        exit 0
elif [[ "$1" = "d" ]]
then
        division $2 $3
        exit 0
else
        echo "Usage:"
        echo "Please enter a/s/m/d and two integers"
        exit 1
fi

10-07 19:04
查看更多