我目前有两个 bash 函数,一个用于上传,另一个用于下载文件。我想创建一个 bash 脚本,允许用户指定他们想要执行的两个操作中的哪一个。
我遇到的问题是上传和下载功能无论如何都会运行。例如:
function upload() {
var=$1
#something goes here for upload
}
function download() {
var=$1
#something here for download
}
main() {
case "$1" in
-d) download "$2";;
-u) upload "$2";;
*) "Either -d or -x needs to be selected"
esac
}
我无法让 main() 仅运行并抑制download
andupload
直到需要为止。
答案1
您还需要调用该main
函数,并将脚本的命令行参数传递给它:
#!/bin/sh
upload() {
echo "upload called with arg $1"
}
download() {
echo "download called with arg $1"
}
main() {
case "$1" in
-d) download "$2";;
-u) upload "$2";;
*) echo "Either -d or -u needs to be selected"; exit 1;;
esac
}
main "$@"
function foo
这里不需要 ksh 风格的声明,foo()
而是使用它,因为它是标准的并且得到更广泛的支持。
答案2
您可以考虑使用getopts
选项解析,并要求用户选择一个函数(如果该选项不存在):
usage() {
echo "usage: $0 ..." >&2
exit $1
}
main() {
local func opt
while getopts 'hdu' opt; do
case $opt in
h) usage 0 ;;
d) func=download ;;
u) func=upload ;;
*) usage 1 ;;
esac
done
shift $((OPTIND - 1))
[[ $# -eq 0 ]] && usage 1
# get the user to select upload or download
if [[ -z $func ]]; then
PS3='Choose a function: '
select func in upload download; do
[[ -n $func ]] && break
done
fi
# now, invoke the function with the argument
"$func" "$1"
}
main "$@"