다음을 통해 데이터를 가져오는 bash 스크립트가 있습니다.
$ ./script.sh var1 var2 var3
내가 원하는 것은 텍스트 파일의 변수가 명령줄에 입력한 것과 동일한 형식이 되는 것입니다.
입력.txt
var1 var2 var3
나는 어떻게든 이 txt를 bash 스크립트 내부가 아닌 명령줄에서 bash 스크립트에 공급하고 싶습니다.
./script.sh input.txt
어떻게 이럴 수있어?
고쳐 쓰다:
이것은 내 스크립트입니다.
#!/bin/bash
DOMAINS=( '.com' '.biz' )
VALUE=$(<input.txt)
INPUT=(`echo "$VALUE"`)
ELEMENTS=${#DOMAINS[@]}
while (( "$#" )); do
for (( i=0;i<$ELEMENTS;i++)); do
whois $1${DOMAINS[${i}]} | grep --perl-regexp --text --null --only-matching --quiet 'Creation Date'
if [ $? -eq 0 ]; then
echo -e "$1${DOMAINS[${i}]}\tregistered\t"
else
echo -e "$1${DOMAINS[${i}]}\tavailable\t"
fi
done
shift
done
보시다시피 저도 스크립트로 구현해 보려고 했는데 프로그래머는 아닙니다.
완벽한 해결책은 input.txt에서 사용된 데이터를 삭제하는 것입니다. 따라서 input.txt에서 var1을 읽으면 거기에서 삭제하세요! 이 문제가 해결될 수 있나요?
답변1
이를 수행하는 방법에는 여러 가지가 있습니다. 스크립트가 여러 매개변수를 사용할 필요가 없으면 루프를 사용하여 while
파일을 읽으십시오. 또한 일부 불필요한 옵션도 제거하겠습니다( grep
사용할 때 출력이 전혀 표시되지 않습니다. 해당 기능을 사용하지 않기 때문에 Perl 정규 표현식이 필요하지 않으며, 사용하지 않기 때문에 필요하지 않습니다). 바이너리 파일을 구문 분석하고) 간결성을 위해 더 짧은 옵션 이름을 사용하십시오.--only--matching
--quiet
--text
따라서 스크립트의 작동하는(약간 개선된) 버전은 다음과 같습니다.
#!/bin/bash
DOMAINS=( '.com' '.biz' )
while read input; do
for (( i=0;i<${#DOMAINS[@]};i++)); do
whois "$input${DOMAINS[$i]}" | grep -q 'Creation Date'
if [ $? -eq 0 ]; then
echo -e "$input${DOMAINS[$i]}\tregistered\t"
else
echo -e "$input${DOMAINS[$i]}\tavailable\t"
fi
done
done < "$1"
다음을 포함하는 파일에 대해 이 명령을 실행하는 경우:
google
foogle
당신은 다음을 얻습니다:
$ foo.sh file
google.com registered
google.biz available
gaagle.com registered
gaagle.biz available