저는 간단한 기본 Apache 가상 호스트 파일(새 웹 애플리케이션을 구축할 때마다 사용해야 함)을 생성하는 작은 스크립트를 생성하려고 합니다.
read
인증된 작업에서 이 스크립트는 웹 애플리케이션의 domain.tld 및 해당 데이터베이스 자격 증명을 묻는 메시지를 표시합니다.
read -p "Have you created db credentials already?" yn
case $yn in
[Yy]* ) break;;
[Nn]* ) exit;;
* ) echo "Please create db credentials and then comeback;";;
esac
read -p "Please enter the domain of your web application:" domain_1 && echo
read -p "Please enter the domain of your web application again:" domain_2 && echo
if [ "$domain_1" != "$domain_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi
read -sp "Please enter the app DB root password:" dbrootp_1 && echo
read -sp "Please enter the app DB root password again:" dbrootp_2 && echo
if [ "$dbrootp_1" != "$dbrootp_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi
read -sp "Please enter the app DB user password:" dbuserp_1 && echo
read -sp "Please enter the app DB user password again:" dbuserp_2 && echo
if [ "$dbuserp_1" != "$dbuserp_2" ]; then echo "Values unmatched. Please try again." && exit 2; fi
내가 Bash를 사용하는 이유
지금은 Ansible 자동화보다 Bash 자동화를 선호합니다. 왜냐하면 Ansible은 학습 곡선이 가파르고 관련 문서(및 제가 구입한 일부 인쇄된 책도 포함)가 불분명하거나 사용 방법을 배우기에 혼란스럽기 때문입니다. 나는 또한 Docker 이미지를 사용하고 빌드 후에 이를 변경하는 것을 좋아하지 않습니다.
내 질문
전체 Bash 스크립트(여기에 전부 넣지는 않았습니다)는 약간 길며, 위의 "무거운" 텍스트로 인해 훨씬 길어집니다. 그러나 이것은 대부분 외관상의 문제입니다.
내 질문
읽기 작업을 확인하는 대신 사용할 수 있는 방법이 있습니까? 두 성별 비교를 두 번 표시하는 유틸리티?
답변1
쉘 기능은 어떻습니까? 좋다
function read_n_verify {
read -p "$2: " TMP1
read -p "$2 again: " TMP2
[ "$TMP1" != "$TMP2" ] &&
{ echo "Values unmatched. Please try again."; return 2; }
read "$1" <<< "$TMP1"
}
read_n_verify domain "Please enter the domain of your web application"
read_n_verify dbrootp "Please enter the app DB root password"
read_n_verify dbuserp "Please enter the app DB user password"
$domain
그런 다음 ,를 사용하여 $dbrootp
원하는 작업을 수행합니다 $dbuserp
.
$1
"string here"에서 다음 변수 이름을 전송하는 데 사용됩니다. read
이는 "document here"보다 더 쉽기 때문에(사용할 수도 있음) 사용됩니다.
$2
프롬프트(무료) 텍스트가 포함되어 있으며 (다소) "무제한" 텍스트 길이를 허용하기 위해 끝에 사용됩니다.
대문자로 표시된 TMP와 [ ... ] &&
"설탕 구문"(무엇이든)은 개인 취향에 따라 사용됩니다.
if - then - fi
여러 명령을 하나의 명령으로 모아 분기로 실행하는 데에도 사용할 수 있으며 중괄호가 필요하지 않습니다 &&
.
답변2
나는 이렇게 할 것이다:
#!/bin/bash
while [[ $string != 'string' ]] || [[ $string == '' ]]
do
read -p "Please enter the domain of your web application: " string
echo "Please enter the domain of your web application: "
done
Command 1
Command 2
타이핑이 적습니다.
물론 모든 문제를 해결하려면 이와 같은 섹션이 필요합니다.
당신의 길과 나의 길 외에는 선택의 여지가 없습니다.