programing

Bash 스크립트 파라미터

powerit 2023. 4. 13. 21:14
반응형

Bash 스크립트 파라미터

다음과 같이 사용해야 하는 셸 스크립트를 작성하려고 합니다.

ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt

그러면 스크립트는 이미지 파일을 텍스트 파일로 변환합니다.지금까지 생각해 낸 것은 다음과 같습니다.

#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1

근데 어떻게 구해야 할지 모르겠어-from그리고.-to가치.어떻게 하는지 생각나는 거 없어?

bashscript에 제공한 인수가 변수에 표시됩니다.$1그리고.$2그리고.$3여기서 숫자는 인수를 나타냅니다. $0명령어 그 자체입니다.

인수는 공백으로 구분되어 있기 때문에 다음과 같이 지정할 수 있습니다.-from그리고.-to명령어에서는 다음 변수도 발생합니다.

./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt

다음과 같은 이점을 얻을 수 있습니다.

$0    # ocrscript.sh
$1    # -from
$2    # /home/kristoffer/test.png
$3    # -to
$4    # /home/kristoffer/test.txt

를 생략하는 것이 더 쉬울지도 모릅니다.-from및 그-to예를 들어 다음과 같습니다.

ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt

그러면 다음과 같은 이점이 있습니다.

$1    # /home/kristoffer/test.png
$2    # /home/kristoffer/test.txt

단점은 올바른 순서로 공급해야 한다는 것입니다.명령줄에서 명명된 인수를 보다 쉽게 해석할 수 있는 라이브러리가 있지만 보통 단순한 셸 스크립트의 경우 문제가 없다면 쉬운 방법을 사용해야 합니다.

다음 작업을 수행할 수 있습니다.

/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1

큰따옴표가 붙어 있는$1및 그$2반드시 필요한 것은 아니지만 어드바이저가 됩니다.큰따옴표 사이에 넣지 않으면 사용할 수 없는 문자열이 있기 때문입니다.

옵션명으로 "from"과 "to"를 사용하는 것이 익숙하지 않은 경우 getopts를 사용하여 구현하기가 매우 쉽습니다.

while getopts f:t: opts; do
   case ${opts} in
      f) FROM_VAL=${OPTARG} ;;
      t) TO_VAL=${OPTARG} ;;
   esac
done

getopts명령줄 인수를 처리하여 편리하게 구문 분석하는 프로그램입니다.

f:t:는 값을 포함하는 2개의 파라미터(콜론으로 구분)를 상정하고 있음을 나타냅니다.뭐랄까f:t:v라고 한다-v는 플래그로만 해석됩니다.

opts현재 파라미터가 저장되어 있습니다.case스테이트먼트는 이 처리를 하는 장소입니다.

${OPTARG}에 파라미터 뒤에 이어지는 값을 나타냅니다. ${FROM_VAL}예를 들어, 가치를 얻을 수 있습니다./home/kristoffer/test.png스크립트를 다음과 같이 실행한 경우:

ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt

다른 사람들이 제안하듯이 bash 스크립트를 처음 작성하는 경우 몇 가지 기본 사항을 숙지해야 합니다.이 튜토리얼은 단순히 어떻게 하면getopts작동하다.

변수 사용"$1","$2","$3"인수에 액세스 할 수 있습니다.사용할 수 있는 모든 파일에 액세스하려면"$@"또는 인수 개수를 가져옵니다.$#(인수가 너무 적거나 너무 많은지 확인하는 것이 도움이 될 수 있습니다).

스크립트를 다양한 머신, 셸, 심지어 sygwin 버전 간에 완전히 이식할 수 있도록 해야 했습니다.게다가 제가 대본을 작성해야 했던 동료들이 프로그래머이기 때문에, 저는 이것을 사용하게 되었습니다.

for ((i=1;i<=$#;i++)); 
do

    if [ ${!i} = "-s" ] 
    then ((i++)) 
        var1=${!i};

    elif [ ${!i} = "-log" ];
    then ((i++)) 
        logFile=${!i};  

    elif [ ${!i} = "-x" ];
    then ((i++)) 
        var2=${!i};    

    elif [ ${!i} = "-p" ]; 
    then ((i++)) 
        var3=${!i};

    elif [ ${!i} = "-b" ];
    then ((i++)) 
        var4=${!i};

    elif [ ${!i} = "-l" ];
    then ((i++)) 
        var5=${!i}; 

    elif [ ${!i} = "-a" ];
    then ((i++)) 
        var6=${!i};
    fi

done;

근거:포함했습니다.launcher.sh로 조작 가 서로이 몇 개 각할 수 , 은 함께할 수 있었기 「이라고 말하고 ), 정도가 모든 작업이 서로 거의 독립적인 여러 단계를 거쳤기 때문에(각 스크립트는 독립적으로 실행할 수 있지만 대개는 함께 실행되기 때문에 '준(quasi)'하거나,사용법, 수 없는 를 읽거나, 잘못된 런처 파일을 사용하거나, "사용법"을 따르거나, HELP를 읽기에는 너무 좋았습니다.이 도움말은 잘못된 순서로 인수가 있는 스크립트를 실행하거나 스크립트가 제대로 작동하지 않는다고 불평하거나 하는 등 모든 것을 망칠 때마다 표시됩니다.나는 화를 잘 내는 성격이기 때문에 내 모든 대본이 동료에게 증명될 수 있도록 철저히 검토하기로 결심했다.이치노

bash 쉬쉬 in$1되는 첫 입니다.$2

/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1

다음 기능을 사용할 수 있습니다.

./your_script.sh some_source_file.png destination_file.txt

큰따옴표로 둘러싸인 설명

다음 3가지 스크립트를 고려합니다.

# foo.sh
bash bar.sh $1

# cat foo2.sh
bash bar.sh "$1"

# bar.sh
echo "1-$1" "2-$2"

이제 호출:

$ bash foo.sh "a b"
1-a 2-b

$ bash foo2.sh "a b"
1-a b 2-

를 호출할 때foo.sh "a b" '아까워지다'를 .bar.sh a b의 인수)및 (2개의 인수)를 foo2.sh "a b" 불러내다bar.sh "a b"(1개).bash로 및 에 두십시오.. 그러면 두통이 크게 줄어듭니다.

언급URL : https://stackoverflow.com/questions/18003370/script-parameters-in-bash

반응형