函数在脚本shell中不起作用

时间:2015-03-10 15:02:48

标签: linux bash shell unix scripting

我在Linux中学习脚本shell。现在我在创建函数时遇到了一些问题。我在CentOS工作。

这是函数的代码:

#votolaurea.lib
votolaurea() {
voto=$(($voto * 11))
voto=$((voto /3))
echo "Il voto sarà $voto";
}

这是调用该功能的脚本

#!/bin/bash
~/imieiscript/votolaurea.lib
echo "Give me the number"
read media
echo 'votolaurea.lib $media'

但输出是:

Give me the number
3 //this is my number in input
votolaurea.lib $media

它不会调用该函数,但会打印所有命令。为什么呢?

2 个答案:

答案 0 :(得分:3)

如果我正确解释了您的代码,您创建了两个文件:

  • 一个名为votolaurea.lib的文件,其中包含函数votolaurea;
  • 另一个未指定(让我们称之为test.sh)。

请记住:

  • 为了在test.sh中使用votolaurea.lib内的任何函数(或其他定义),您需要使用source命令使用来源(或它相当于.);
  • 单引号字符串不由shell处理,但保持不变;因此,如果你想调用函数votolaurea(),你必须把它放在引用的字符串之外;
  • 使用位置参数$1$2等将参数传递给函数。

考虑到以前的要点,您应该对代码进行一些更改。

votolaurea.lib

#votolaurea.lib
votolaurea() {
    echo $(($1 * 11 / 3 ))
}

test.sh

#!/bin/bash
source ~/imieiscript/votolaurea.lib
echo "Give me the number"
read media
echo "Il voto sarà $(votolaurea $media)";

答案 1 :(得分:0)

要将字符串作为命令执行,您应该使用``$()

echo `votolaurea.lib $media`
echo $(votolaurea.lib $media)