我可以只从终端调用一个函数而不是整个 bash 脚本吗?
Can I only call a function from the terminal rather the whole bash script?
我有一个 bash 脚本,看起来是这样的:
#!/bin/bash
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
one
two
如果我简单地做 bash test.sh 两个函数都被执行了。
我想做的是从终端调用脚本,同时指定两个函数之一,并只执行它。
也许是这样的: bash test.sh$one() 它应该只打印出来
I am function one!!
这可能吗?如果可能,我将如何实现它?
谢谢!
=========================
编辑: 根据@Waqas 的建议,我最终实施了以下对我有用的方法:
function main {
if [ -z "" ]
then
some commands
# else run the given function only
else
fi
}
main "$@"
谢谢!!!
最好将文件分开:将函数定义移到单独的文件中,比如 ~/lib/testlib.src
。你的 test.sh 然后变成
#!/bin/bash
. ~/lib/testlib.src
one
two
如果您需要交互式 shell 中的定义,请手动执行 . ~/lib/testlib.src
,或者如果您希望它们始终可用,请将此语句放入您的 ~/.bashrc
.
您可以通过在定义函数之后但在任何其他代码行之前编写 case 语句来实现。
#!/bin/bash
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
case in
one)
one
;;
two)
two
;;
*)
one
two
;;
esac
然后可以用作:
$ ./test.sh one
# I am function one!!
$ ./test.sh two
# I am function two!!
在上面的示例中,我将您的脚本主体放在 *) 选项下,但如果它更适合您的需要,您可以改为使用一个)和两个)选项,在调用它们的单个函数后“退出”:
case in
one)
one
exit 0
;;
two)
two
exit 0
;;
esac
one
two
这一切都假设您没有向脚本传递任何其他参数,并且 $1 将用于所需的功能。否则 case 语句将变得更加复杂。
有很多方法可以编写代码来满足您的要求。我将为此编写代码的方式如下:
#!/bin/bash
function main {
# If the argument is empty then run both functions else only run provided function as argument .
[ -z "" ] && { one; two; } ||
}
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
main "$@"
如果您只在不传递参数的情况下执行脚本,那么两个函数都将 运行 而在传递参数的情况下,只有一个函数可以工作。
示例 1(两个函数都将 运行):bash script_name
示例2(只有函数一会运行):bash script_name 一个
示例 3(只有函数二会 运行):bash script_name two
我有一个 bash 脚本,看起来是这样的:
#!/bin/bash
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
one
two
如果我简单地做 bash test.sh 两个函数都被执行了。
我想做的是从终端调用脚本,同时指定两个函数之一,并只执行它。 也许是这样的: bash test.sh$one() 它应该只打印出来
I am function one!!
这可能吗?如果可能,我将如何实现它?
谢谢!
=========================
编辑: 根据@Waqas 的建议,我最终实施了以下对我有用的方法:
function main {
if [ -z "" ]
then
some commands
# else run the given function only
else
fi
}
main "$@"
谢谢!!!
最好将文件分开:将函数定义移到单独的文件中,比如 ~/lib/testlib.src
。你的 test.sh 然后变成
#!/bin/bash
. ~/lib/testlib.src
one
two
如果您需要交互式 shell 中的定义,请手动执行 . ~/lib/testlib.src
,或者如果您希望它们始终可用,请将此语句放入您的 ~/.bashrc
.
您可以通过在定义函数之后但在任何其他代码行之前编写 case 语句来实现。
#!/bin/bash
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
case in
one)
one
;;
two)
two
;;
*)
one
two
;;
esac
然后可以用作:
$ ./test.sh one
# I am function one!!
$ ./test.sh two
# I am function two!!
在上面的示例中,我将您的脚本主体放在 *) 选项下,但如果它更适合您的需要,您可以改为使用一个)和两个)选项,在调用它们的单个函数后“退出”:
case in
one)
one
exit 0
;;
two)
two
exit 0
;;
esac
one
two
这一切都假设您没有向脚本传递任何其他参数,并且 $1 将用于所需的功能。否则 case 语句将变得更加复杂。
有很多方法可以编写代码来满足您的要求。我将为此编写代码的方式如下:
#!/bin/bash
function main {
# If the argument is empty then run both functions else only run provided function as argument .
[ -z "" ] && { one; two; } ||
}
function one {
echo "I am function one!!"
}
function two {
echo "I am function two!!"
}
main "$@"
如果您只在不传递参数的情况下执行脚本,那么两个函数都将 运行 而在传递参数的情况下,只有一个函数可以工作。
示例 1(两个函数都将 运行):bash script_name
示例2(只有函数一会运行):bash script_name 一个
示例 3(只有函数二会 运行):bash script_name two