是否可以从 Unix 控制台调用函数(在 shell 脚本中定义)?我有一个像
这样的功能add ()
{
a=$1
b=$2
c=`expr $a + $b`
}
这是在脚本 "my_script.sh"
中定义的。如何从命令提示符调用此函数?
最佳答案
要使用参数,您无需应用重定向运算符 <
, 它重定向在 <
之后给出的文件到程序的标准输入。您需要在脚本中调用您的函数,以便使用参数 $...
,或者您可以简单地在您的 shell 中加载该函数,然后使用它。
在这两种情况下,您的函数调用都是这样执行的:
add arg1 arg2
如果通过命令行,您必须加载您的 .sh
的内容文件——你的函数定义——,这样你就可以从你的 shell 中调用它们。在这种情况下,您的文件应如下所示:
#! /bin/bash
add () {
a=$1
b=$2
c=$(expr $a + $b)
echo $c
}
并通过执行以下操作在您的 shell 中使用该函数:
source script.sh
add 100 1000
如果在您的 script.sh 文件中,您使用:
./script.sh arg1 arg2
脚本文件的内容是:
#! /bin/bash
add () {
a=$1
b=$2
c=$(expr $a + $b)
echo $c
}
add $1 $2
观察:您的语法在函数定义中无效:您必须包含一个表达式才能分配其评估结果;评估表达式的语法可以是 cmd
或 $(cmd),区别在于第一种方法不允许嵌套调用。
如果您定义了多个函数,您可以为每个函数调用设置参数,或者简单地定义您的函数,然后使用“source script.sh”将它们加载到您的 shell 中。
既然你已经加载了函数,你就需要调用它们,就像它们已经被一一定义一样。函数内的args对应于C中经典的“argv[]”参数,它们是函数调用所特有的。
例如,如果你想定义一个 add 和一个 sub 函数,你会:
#! /bin/bash
add () {
a=$1
b=$2
c=$(expr $a + $b)
echo $c
}
add $1 $2
sub() {
a=$1
b=$2
c=$(expr $a - $b)
echo $c
}
sub $3 $4
或者任何适合您应用的参数编号。
但是请注意,您可能会忘记 var 的“语义”:这可能是由 bash 脚本的动态范围引起的,它会在每次执行调用时隐藏您的变量定义。
一个简单的例子就是 for 循环。考虑如下定义的添加函数:
add () {
let i=$1 + $2
}
for 循环被执行为:
for (( i = 0; i < 10; i++ )); do
echo $i
add i 5
echo $i
done
输出是:
0
5
6
11
由于变量“i”已被修改,在 for 循环期间,不仅由“i++”修改,而且由函数“add”修改,在其范围内使用了“i”。
关于linux - 在 Bourne Shell 中调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13484160/