사용자가 두 가지 기능 중 실행하려는 기능을 입력할 수 있는 기본 bash 스크립트를 어떻게 생성합니까?

사용자가 두 가지 기능 중 실행하려는 기능을 입력할 수 있는 기본 bash 스크립트를 어떻게 생성합니까?

현재 저는 두 개의 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 fooksh 스타일 선언은 여기서는 필요하지 않지만 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 "$@"

관련 정보