Bash : getopts를 사용하여 매개 변수 전달

iso_9001_

나는 이것이 간단한 질문이라는 것을 알고 있으며 getopts 튜토리얼과 예제를 검토했지만 막혔습니다. 링크 를 확인 하면 @fedorqui의 도움으로 파일에서 배열 요소를 가져 오기 위해 코드를 작성했음을 알 수 있습니다.

그러나 필요한 것은 입력 순서를 변경하더라도 스크립트가 계속 작동하도록 입력을 매개 변수화하는 것입니다.

이것은 내가 작성한 첫 번째 코드입니다.

#!/bin/bash

file=$3 row=$1 col=$2 str1="Hata: " str2=". satır " str3=". sütun yok"

if [ $row -gt 3 ]
then
    echo $str1$row$str2$col$str3
elif [ $col -gt 3 ]
then
    echo $str1$row$str2$col$str3
else
    awk 'NR==row{print $col}' row=$row col=$col $file
fi 

이제 스크립트는 다음과 같이 작동 $ ./tablooku.sh 3 2 tablom.dat하며 출력은 다음과 같습니다.

~/Desktop $ ./tablooku.sh 3 2 tablom.dat 
Kopenhag

내가해야 할 일은이 코드를 번역하여를 입력 할 때 $ ./tablooku.sh -r 3 -c 2 tablom.dat스크립트가 작동하도록하는 것입니다.

이것은 내가 작성한 코드입니다.

#!/bin/bash

str1="Hata: "
str2=". satır "
str3=". sütun yok"

while getopts "r:c:f:" opts
do
            case $opts in
            r)     row=$OPTARG echo "-r was triggered, Parameter: $OPTARG";;
            c)     col=$OPTARG echo "-c was triggered, Parameter: $OPTARG";;
            f)     fi=$OPTARG echo "-f was triggered, Parameter: $OPTARG";;
            \?)     printf "Kullanım: %s -r değer -c değer dosya adresi\n" $0
                          exit 2;;
           esac
done

if [ $row -gt 3 ]
then
    echo $str1$row$str2$col$str3
elif [ $col -gt 3 ]
then
    echo $str1$row$str2$col$str3
else
    awk 'NR==r{print $c}' r=$row c=$col $fi
fi

여기서 무엇이 잘못되었는지 말씀해 주시겠습니까? 명령을 실행할 때 시스템 출력은 다음과 같습니다.

~/Desktop $ ./go_test.sh -r 3 -c 2 tablom.dat 
-r was triggered, Parameter: 3
-c was triggered, Parameter: 2
./go_test.sh: line 23: [: -gt: unary operator expected
./go_test.sh: line 26: [: -gt: unary operator expected

프롬프트가 멈 췄고 ctrl+z대기를 중단 하기 위해 사용해야 합니다. 파일 위치를 할당하지 못한 것 같지만 fi문제를 해결할 수 없습니다.

참고 : -r은 행,-c는 열, 마지막 매개 변수는 옵션 코드 (예 : -f)를 사용하지 않는 파일 위치입니다.

업데이트 1 :

나는 경우 브래킷을 변화 ]와 함께 ]][함께 [[. 이제 unary operator expected오류가 사라졌습니다. 이제 프롬프트가 대기하고 인쇄하지 않고 대기 를 중단하는 데 -f was triggered, Parameter:...사용 ctrl+z합니다.

업데이트 2 :

@grebneke와 @TimK의 제안으로 세미콜론을 추가하고 fi매개 변수를 fil. 이렇게하면 스크립트가 작동합니다. 그러나 남은 문제가 하나 있습니다. 입력하면 코드가 작동합니다 $ ./tablooku.sh -r 3 -c 2 -f tablom.dat. 그러나 작성하지 않고 실행하려면 -f. 가능할까요?

Grebneke

이 라인에서 :

        r)     row=$OPTARG echo "-r was triggered, Parameter: $OPTARG";;
        c)     col=$OPTARG echo "-c was triggered, Parameter: $OPTARG";;
        f)     fi=$OPTARG echo "-f was triggered, Parameter: $OPTARG";;

row/col/fi나머지 라인에만 할당 합니다. 할당 뒤에 세미콜론을 추가하면 나머지 스크립트에 대해 할당 된 상태로 유지됩니다.

        r)     row=$OPTARG; echo "-r was triggered, Parameter: $OPTARG";;
        c)     col=$OPTARG; echo "-c was triggered, Parameter: $OPTARG";;
        f)     fi=$OPTARG; echo "-f was triggered, Parameter: $OPTARG";;

편집하다 <deleted, I misunderstood the question>

편집 2 를 사용한 후 나머지 인수를 얻으려면 다음 과 같이 getopts해야합니다 shift.

while getopts "r:c:" opts
do
...
done

shift $(( $OPTIND-1 ))

# Now, $1, $2 etc are your arguments as you are used to:
$ ./tablooku.sh -r 3 -c 2 tablom.dat
# $1 will be "tablom.dat"

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JtextField에서 java / jdbc를 사용하여 매개 변수 전달

분류에서Dev

DI를 사용하여 DbContext에 매개 변수 전달

분류에서Dev

jquery .ajax를 사용하여 nullable 매개 변수 전달

분류에서Dev

|를 사용하여 매개 변수 전달

분류에서Dev

Window.location.href를 사용하여 매개 변수 전달

분류에서Dev

lb 및 ub를 사용하여 fmincon에 매개 변수 전달

분류에서Dev

웹 API를 사용하여 여러 매개 변수를 전달하는 방법

분류에서Dev

Popen을 사용하여 Python 변수를 Powershell 매개 변수에 전달

분류에서Dev

HTML onClick을 사용하여 PHP 변수를 매개 변수로 전달

분류에서Dev

BASH-변수를 사용하여 매개 변수 참조

분류에서Dev

Stream 사용시 요청 헤더를 사용하여 매개 변수 전달

분류에서Dev

매개 변수로 전달하여있어서의 물체를 사용하여

분류에서Dev

Angularjs $ interval : 콜백 함수를 매개 변수로 사용하여 함수 전달

분류에서Dev

C #에서 CreateRemoteThread를 사용하여 여러 매개 변수 전달

분류에서Dev

C #에서 CreateRemoteThread를 사용하여 여러 매개 변수 전달

분류에서Dev

Razor를 사용하여 Ajax 호출에서 여러 매개 변수 전달

분류에서Dev

플라스크를 사용하여 URL에 여러 매개 변수 전달

분류에서Dev

bash 스크립트 파일에 매개 변수를 전달하려면

분류에서Dev

bash 스크립트에 매개 변수 (= 경로 *)를 전달하는 방법

분류에서Dev

cakephp를 사용하여 URL에 매개 변수를 전달하는 방법

분류에서Dev

"/"를 사용하여 매개 변수 PHP를 전달하는 방법

분류에서Dev

함수 매개 변수를 사용하여 lm 공식에 전달

분류에서Dev

Fortran에서 매개 변수를 사용하여 외부 함수 전달

분류에서Dev

apply를 사용하여 expand.grid에서 함수로 매개 변수 전달

분류에서Dev

jsoup을 사용하여 원시 매개 변수를 전달하는 방법

분류에서Dev

Get JSON을 사용하여 PHP에 매개 변수를 전달하는 방법

분류에서Dev

Capybara를 사용하여 GET 매개 변수를 컨트롤러에 전달

분류에서Dev

bash 함수 매개 변수를 emacs에 전달

분류에서Dev

AJAX를 사용하여 Rails 컨트롤러에 매개 변수 전달 문제

Related 관련 기사

  1. 1

    JtextField에서 java / jdbc를 사용하여 매개 변수 전달

  2. 2

    DI를 사용하여 DbContext에 매개 변수 전달

  3. 3

    jquery .ajax를 사용하여 nullable 매개 변수 전달

  4. 4

    |를 사용하여 매개 변수 전달

  5. 5

    Window.location.href를 사용하여 매개 변수 전달

  6. 6

    lb 및 ub를 사용하여 fmincon에 매개 변수 전달

  7. 7

    웹 API를 사용하여 여러 매개 변수를 전달하는 방법

  8. 8

    Popen을 사용하여 Python 변수를 Powershell 매개 변수에 전달

  9. 9

    HTML onClick을 사용하여 PHP 변수를 매개 변수로 전달

  10. 10

    BASH-변수를 사용하여 매개 변수 참조

  11. 11

    Stream 사용시 요청 헤더를 사용하여 매개 변수 전달

  12. 12

    매개 변수로 전달하여있어서의 물체를 사용하여

  13. 13

    Angularjs $ interval : 콜백 함수를 매개 변수로 사용하여 함수 전달

  14. 14

    C #에서 CreateRemoteThread를 사용하여 여러 매개 변수 전달

  15. 15

    C #에서 CreateRemoteThread를 사용하여 여러 매개 변수 전달

  16. 16

    Razor를 사용하여 Ajax 호출에서 여러 매개 변수 전달

  17. 17

    플라스크를 사용하여 URL에 여러 매개 변수 전달

  18. 18

    bash 스크립트 파일에 매개 변수를 전달하려면

  19. 19

    bash 스크립트에 매개 변수 (= 경로 *)를 전달하는 방법

  20. 20

    cakephp를 사용하여 URL에 매개 변수를 전달하는 방법

  21. 21

    "/"를 사용하여 매개 변수 PHP를 전달하는 방법

  22. 22

    함수 매개 변수를 사용하여 lm 공식에 전달

  23. 23

    Fortran에서 매개 변수를 사용하여 외부 함수 전달

  24. 24

    apply를 사용하여 expand.grid에서 함수로 매개 변수 전달

  25. 25

    jsoup을 사용하여 원시 매개 변수를 전달하는 방법

  26. 26

    Get JSON을 사용하여 PHP에 매개 변수를 전달하는 방법

  27. 27

    Capybara를 사용하여 GET 매개 변수를 컨트롤러에 전달

  28. 28

    bash 함수 매개 변수를 emacs에 전달

  29. 29

    AJAX를 사용하여 Rails 컨트롤러에 매개 변수 전달 문제

뜨겁다태그

보관