스크립트가 실행될 때 어떤 환경을 전달할 수 있기를 원합니다. 마찬가지로 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-alpha
1 에서 다룸 )을 사용할 수 있습니다.
다음을 정의할 수 있습니다 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
배열에 로드합니다.urls
read
#!/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+는 이제 널리 사용 가능합니다.