명령줄의 Bash 스크립트 컬 입력 변수

명령줄의 Bash 스크립트 컬 입력 변수

스크립트가 실행될 때 어떤 환경을 전달할 수 있기를 원합니다. 마찬가지로 script.sh dev( $dev적절한 URL은 스크립트의 컬 명령에 채워집니다).
통과 옵션으로 환경을 인쇄하는 것도 가능한가요?

#!/bin/bash

# Environment/URL
dev=myurl.myco.com
tst=myurl.myco.com
tst02=myurl.myco.com
tst03=myurl.myco.com
qa01=myurl.myco.com

request=`curl -L -k -H 'Content-Type:application/x-www-form-urlencoded' -H 'cache-control:no-cache' -X  https://$tst/bla/bla/bla/bla 2>/dev/null`

답변1

Bash를 사용하고 있으므로 연관 배열( bash-4.0-alpha1 에서 다룸 )을 사용할 수 있습니다.

다음을 정의할 수 있습니다 script.

#!/bin/bash

declare -A urls

urls[dev]=dev.example.com
urls[tst]=test.example.com

request="$(curl ...  https://"${urls["$1"]}"/foo/bar ...)"

다음과 같이 호출하세요.

script dev

첫 번째 위치 매개변수( $1)는 배열에서 URL을 검색하는 키로 사용됩니다 urls.

다음과 같은 (보다 사용자 친화적인) 변형으로DopeGhoti가 제안한, script아마도:

#!/bin/bash

declare -A urls

urls[dev]=dev.example.com
urls[tst]=test.example.com

select opt in "${!urls[@]}"; do
    [ ! -z "$opt" ] && break
done

request="$(curl ... https://"${urls["$opt"]}"/foo/bar ...)"

이는 다음과 같이 호출됨을 의미합니다.

script

select명령은 사용자에게 어레이에 정의된 키 목록을 제공 urls하고 유효한 키가 선택되었는지 확인합니다.

마지막으로 문제를 구분하는 방법으로 URL을 here 라는 일반 텍스트 파일에 다음 urlfile형식으로 저장할 수 있습니다.

dev dev.example.com
tst test.example.com

그리고 루프를 사용하여 내용을 script배열에 로드합니다.urlsread

#!/bin/bash

declare -A urls

while read -r label url; do
    urls["$label"]="$url"
done <urlfile

select opt in "${!urls[@]}"; do
    [ ! -z "$opt" ] && break
done

request="$(curl ... https://"${urls["$opt"]}"/foo/bar ...)"

$(...)참고: 명령 대체 구문( 대신 )을 선택했습니다. ` `왜냐하면 필요하지 않았음에도 불구하고일반적으로 더 일반적인.


이걸로 1범죄2011년부터. Bash 4.0+는 이제 널리 사용 가능합니다.

관련 정보