是否可以从Unix控制台调用函数(在shell脚本中定义)? 我有一个function
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
Obs :你的语法在函数定义中是无效的:你必须拥有一个表达式来赋值它的结果; 评估表达式的语法可以是cmd
或$(cmd),区别在于第一种方法不允许嵌套调用。
如果您定义了多个函数,您可以为每个函数调用设置参数,或者简单地定义函数,然后使用“source script.sh”将其加载到shell中。
既然你已经加载了函数,你需要调用它们,如果它们已经被逐一定义。 函数内部的参数对应于C语言中的经典的“argv []”参数,它们对函数调用是唯一的。
例如,如果你想定义一个添加和一个子函数,你会有:
#! /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
或者任何参数可能适合您的应用程序。
不过请注意,您可能会忽略变量的“语义”:这可能是由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”。