현재 저는 두 개의 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
}
download
필요할 때까지 main()을 실행하고 억제하도록 할 수는 없습니다 upload
.
답변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 "$@"