함수에 입력된 인수 수를 제어하는 ​​방법

함수에 입력된 인수 수를 제어하는 ​​방법

간단한 메뉴 기반 계산기 스크립트를 만들려고 합니다. 사용자가 올바른 매개변수를 입력하지 않고 add() 또는 minus() 함수를 호출할 때마다 오류 메시지를 표시하고 싶습니다. 매개변수가 3개 이상(연산자 포함), 매개변수 없음(0과 같음), 잘못된 연산자(뺄셈 또는 뺄셈이 아님) 등

#은 명령줄에 입력된 인수를 의미하므로 해당 부분이 잘못된 것으로 알고 있지만 함수에 입력된 인수를 확인하는 방법을 모르겠습니다.

#!/bin/bash  
display() {
echo "Calculator Menu" 
echo "Please select an option between add, subtract or exit"
echo "A. Add"
echo "B. Subtract"
echo "C. Exit"
} 
#initialize choice n
choice=n 

if [ $# > 3 ] 
then 
echo " You need to input 3 parameters. "
fi

if [ $# -eq 0 ]
then 
echo " You have not entered any parameters, please input 3. "
fi 

if  [ $2 != "+" ] || [ $2 != "-" ]
then
echo " Please enter an add or subtract operator."
fi


add() {
echo " The sum of $one + $three equals $(( $one $op $three ))"
}

subtract () {
echo " The difference of $one - $three equals $(( $one $op $three )) "
} 

while [ $choice != 'C' ] 
do display
read choice
if [ $choice = 'A' ] 
then 
read -p "Please enter two operands and the operator '+': " one op three
add $one $op $three

elif [ $choice = 'B' ] 
then
read -p " Please enter two operands and the operator '-': " one op three
subtract $one $op $three

elif [ $choice = 'C' ]
then
echo "Thank you for using this program. The program will now exit." 
fi 

done
 


sleep 3

exit 0

답변1

$#아직도 당신이 원하는 것. 여기에는 명령줄의 함수나 스크립트에 전달된 위치 인수의 수가 포함됩니다. 위치 매개변수 섹션을 참조하세요.내부 변수.

예를 들어 add다음과 같이 함수를 수정합니다.

add() {
    if [ $# -ne 3 ]
    then
            echo " ERROR: Incorrect number of arguments"
            return 1
    fi
    echo " The sum of $one + $three equals $(( $one $op $three ))"
}

(인수 1개)에 대해서는 오류가 반환되지만 (인수 3개)에 대한 계산 결과가 반환됩니다 2+2.2 + 2

어쩌면 당신은 방법을 묻고 싶을 수도 있습니다.부르다add및 함수의 3개 테스트에는 subtract매개변수가 포함되어 있습니다. 이 경우에는 이러한 테스트를 다른 함수로 래핑합니다.

test_args() {
    if [ $# > 3 ]
    ...12 lines omitted...
    fi
}

$@동일한 매개변수를 모두 test_args함수 에 전달하는 데 사용됩니다 . 예를 들어:

add() {
    test_args $@
    echo " The sum of $one + $three equals $(( $one $op $three ))"
}

관련 정보