고정된 구문 오류: 'for 루프'에서 예기치 않은 파일 끝

고정된 구문 오류: 'for 루프'에서 예기치 않은 파일 끝

그래서 나는 몇 시간 동안 이 문제를 직접 해결하려고 노력했지만 문제가 있는 코드 블록일 수는 없었습니다. 변경하고 다시 썼으며 심지어 각 줄 뒤에 에코를 "실행"하려고 시도했지만 작동하지 않는 것 같습니다. . 게임 내 특정 이벤트의 CSV 파일을 해독하는 데 사용되는 코드입니다. 원하는 경우 전체 코드는 다음과 같습니다.https://pastebin.com/Gv3Fvyxy

for path in $(find assets -name "*.csv")
    do 
    f=$(echo "$path" | rev | cut -d"/" -f1 | rev)
    (
        dd if=$path bs=1 count=9 status=none
        dd if=/dev/zero bs=1 count=4 status=none
        dd if=$path bs=1 skip=9 status=none
    ) | lzma -dc -f > "decrypted/"$f

    done

답변1

이 스크립트의 향상된 버전:

#!/bin/bash

find assets -name '*.csv' -exec bash -c '
    f="$(awk '{print $NF}' <<< "$1")"
    {
        dd if="$1" bs=1 count=9 status=none
        dd if=/dev/zero bs=1 count=4 status=none
        dd if="$1" bs=1 skip=9 status=none
    } | lzma -dc -f > "decrypted/$f"

' -- {} \;
  • 이름에 공백이 있는 파일 처리
  • 단순화rev|cut|rev
  • 더 많은 따옴표를 사용하십시오!

쉘에서 올바르게 인용하는 방법을 배우는 것은 매우 중요합니다.

공백/메타 문자를 포함하는 모든 리터럴은 "큰따옴표"로 처리합니다.모든확장: "$var", "$(command "$var")", "${array[@]}", "a & b". 'single quotes'코드나 텍스트 $'s: 'Costs $5 US'에 대해서는 ssh host 'echo "$HOSTNAME"'을 참조하십시오.
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words

답변2

여기에 표시되는 스크립트 버전은 Pastebin에 게시한 스크립트 버전과 다릅니다.

이것코드 붙여넣기다음 줄이 있습니다 (57):

    f= $(echo "$path" | rev | cut -d "/" -f1 | rev)

뒤에 공백이 있는데 =, 이는 문법적인 문제입니다.

스크립트가 바로 거기(또는 그 근처)에서 실패할 수 있습니다.

실제로 전체 코드 줄은 다음과 같이 단순화될 수 있습니다.

    f=${path##*/}

하지만 너도 있어많은작은 코드 오류. 대부분의 문제는 다음 제안 사항을 따르면 감지하고 해결할 수 있습니다.shellcheck.net. 거기에 스크립트를 붙여넣고 정리하세요.

정리된 버전은 다음과 같습니다.

#!/bin/bash

Usage(){ echo "Usage: $0 [-n filename.apk]"; exit; }

case $1 in
    -h) Usage;;
    -n) if [ -z "$2" ];then
        echo "You need to insert a filename"
        Usage
    fi
    filename=$2
    ;;
    *)  echo "Give me the clash royale filename"
        read -r filename
    ;;
esac

if [ ! -f "$filename" ];then
    echo "File \"$filename\" not found!"; exit
fi

#Unzipping
echo "Unzipping crash royale apk"
unzip -o -q "$filename" -d "extracted"

#Decrypting
echo "Decrypting csv files"
mkdir decrypted
find assets -name '*.csv' -exec bash -c '
    f="${1##*/}"
    {
        dd if="$1" bs=1 count=9 status=none
        dd if=/dev/zero bs=1 count=4 status=none
        dd if="$1" bs=1 skip=9 status=none
    } | lzma -dc -f > "decrypted/$f"

' sh {} \;

echo "All the decrypted file are stored in the decrypted folder"

#Delete partial files
rm -r extracted

관련 정보