CLI에서 텍스트 파일의 명령을 bash 스크립트로 구문 분석하는 방법

CLI에서 텍스트 파일의 명령을 bash 스크립트로 구문 분석하는 방법

다음을 통해 데이터를 가져오는 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   

관련 정보