파일에서 숫자를 읽고 짝수인지 홀수인지 확인하는 도우미 스크립트

파일에서 숫자를 읽고 짝수인지 홀수인지 확인하는 도우미 스크립트

그래서 나는 숫자로 채워진 파일이 존재하는지 내 스크립트가 테스트할 수 있기를 원합니다. 그렇게 하기는 하지만 작업이 완료된 후에는 모든 줄의 모든 숫자를 확인하므로 잠시 동안 실행하여 파일의 숫자가 홀수인지 짝수인지 확인하고 싶습니다. 내가 아는 바로는 내 스크립트가 제대로 구성되어 있지 않지만 아래 코드는 원하는 결과를 생성하지 않습니다.

exist=rnddata.txt
if [ -f $exist ]; then
 echo "file exist processing"
else
 echo "file does not exist"
exit1
fi
while read exist
do
if [ $((exist % 2)) -eq 0 ]; then
 echo "even"
else
echo "odd"
fi
done
exit

답변1

이 시도:

while read number
do
    if [ $((number % 2)) -eq 0 ]; then 
        echo even
    else    
        echo odd 
    fi      
done < "$exist"

read명령줄에서 변수를 읽습니다. 따라서 파일 데이터 read를 얻으 려면 루프에 파일 데이터를 공급해야 합니다 . 여기서는 < "$exist"이를 수행하기 위해 after 루프를 사용합니다.donewhile

read명령은 쉘 내장 명령이므로 맨페이지가 없습니다. 작동 방식을 보려면 다음을 입력하세요. man sh(힌트, readonly이 방법으로 찾는 것이 더 쉽기 때문에 검색하세요.)

답변2

대부분의 경우 다음 사항에 대해 걱정할 필요가 없습니다.

if    [ -e "$file" ]
then  echo exists
else  echo not exists
fi

사람들이 이런 일을 할 때, 그들은 정말 그들의 노력을 낭비하고 있는 것입니다. 한 스크립트와 다른 스크립트의 동작과 출력 형식 사이에 연관성이 거의 없기 때문에 문제가 될 수도 있습니다. 어쨌든 다음과 같은 이유로 모두 헛된 것입니다.

sh -c 'exec <not_exist; echo can i\?' my_zero

my_zero: 1: my_zero: cannot open not_exist: No such file

스크립트된 POSIX 쉘은 내장된 특수 쉘이 실패한 쉘 리디렉션의 대상인 경우 stderr에 기록하여 종료됩니다. 특수 내장 기능은 다음과 같습니다:

: continue break exec set . shift unset
times trap exit export readonly eval return

다음과 같이 호출하여 특수 상태를 다운그레이드할 수 있습니다 command.

sh -c 'command exec <not_exist; echo can i\?' my_zero

my_zero: 1: my_zero: cannot open not_exist: No such file
can i?

따라서 파일 읽기/쓰기를 강력하게 처리하기 위한 가장 간단하고 효율적인 전략은 상호 작용하려는 파일 설명자에 파일을 직접 배치하고 필요에 따라 쉘이 모든 오류 출력을 처리하도록 하는 것입니다. 만약 그렇게 되어야 한다면, 그리고 액션이 그 자체로 말하게 하는 방향으로 스크립트를 작성한다면, 그것은 일어날 것입니다.

sh -c '
    cat_fname()
        for   f
        do    exec   <"$f"
              printf "\n%-5s%-$((${#f}+2))s%s\n" === "$f" ===
              cat
        done
    cat_fname a[1-9]/a[1-9].txt not_exist /dev/fd/0'

===  a1/a1.txt  ===
1 1 1 11 1 1 1 1

===  a2/a2.txt  ===
2 2 2 12 2 2 2 2

===  a3/a3.txt  ===
3 3 3 13 3 3 3 3

===  a4/a4.txt  ===
4 4 4 14 4 4 4 4

===  a5/a5.txt  ===
5 5 5 15 5 5 5 5

===  a6/a6.txt  ===
6 6 6 16 6 6 6 6

===  a7/a7.txt  ===
7 7 7 17 7 7 7 7

===  a8/a8.txt  ===
8 8 8 18 8 8 8 8

===  a9/a9.txt  ===
9 9 9 19 9 9 9 9
sh: 4: cannot open not_exist: No such file

관련 정보