파일을 읽는 동안 "유효한 식별자가 아닙니다"

파일을 읽는 동안 "유효한 식별자가 아닙니다"

Putty 원격 연결에서는 파일을 한 줄씩 읽고 각 줄을 구분 기호(";")로 잘라낸 다음 변수가 조건을 충족하면 명령을 실행하려고 합니다. 그러나 파일을 읽을 때 "유효한 식별자가 아닙니다"라는 메시지가 나타납니다.

test.sh 파일에는 몇 가지 간단한 논리가 있습니다.

while read download.archive
do
    likes = $(echo cut -d ";" -f 1 $line)
    echo $likes
    dislikes = $(echo cut -d ";" -f 2 $line)
    dislikes = $((dislikes * 95))
    url = $(echo cut -d ";" -f 3 $line)

if [$likes -gt $dislikes]
then
    youtube-dl --config-location youtube-dl-3.conf url
fi

done < download.archive

download.archive 파일 내용은 다음과 같습니다.

9873;354;https://www.youtube.com/watch?v=0fd56CGnVRU
3267;54;https://www.youtube.com/watch?v=Mq4jAwPdCMw
25411;871;https://www.youtube.com/watch?v=PcSBOUpgngM
2829;44;https://www.youtube.com/watch?v=S-rj8m7Ssow
921;303;https://www.youtube.com/watch?v=JchVQMuxRVA
2014;32;https://www.youtube.com/watch?v=H8Y_ZfNViPU

그러나 ./test.sh를 실행하려고 하면 "./test.sh: line 4: read: 'download.archive': not a valid identifier". 파일이 유효하면 오류가 발생하는 이유는 무엇입니까?

답변1

많은 오류가 발생한 후 작동 코드는 다음과 같습니다.

while IFS= read -r line; do

    likes=$(cut -d ";" -f 1 <<< "$line")
    dislikes=$(cut -d ";" -f 2 <<< "$line")
    likes=$((likes / 50))
    url=$(cut -d ";" -f 3 <<< "$line")

if [ $likes -gt $dislikes ]
then
    youtube-dl --config-location youtube-dl-3.conf $url
fi

done < download.archive

"읽기" 명령의 첫 번째 줄은 항상 다음과 같습니다(읽기철사), 읽을 파일은 끝의 "done" 문 뒤에 위치합니다(done <아카이브 다운로드).이 글은 여기이러한 내용 IFS-r추가 내용이 설명되어 있으며 해당 내용이 무엇인지 설명합니다.

변수를 할당할 때 할당 사이에 공백을 넣을 수 없는 것 같습니다. 그래서 이것은 작동하지 않습니다

likes = $(cut -d ";" -f 1 $line)

그러나 그것은 그렇습니다:

likes=$(cut -d ";" -f 1 $line)

...단, 프로그램이 현재 읽고 있는 줄을 참조하려면 다음과 같이 .like를 사용해야 합니다 <<<.

likes=$(cut -d ";" -f 1 <<< $line)

마지막으로 (문에서) 조건을 확인하는 동안 if아래와 같이 여는 괄호와 닫는 괄호 사이, 내부 조건 사이에 공백이 있어야 합니다.

if [ $likes -gt $dislikes ]

urlyoutube-dl URL이 포함된 변수를 참조하려면 $다음과 같이 .like를 사용합니다.

$url

관련 정보