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 ]
url
youtube-dl URL이 포함된 변수를 참조하려면 $
다음과 같이 .like를 사용합니다.
$url