유닉스에서 하나의 파일에서 두 개의 다른 결과를 얻는 방법은 무엇입니까?

유닉스에서 하나의 파일에서 두 개의 다른 결과를 얻는 방법은 무엇입니까?

그래서 방에 들어갔을 때 두 가지 반응이 나오는 던전을 만들려고 하는데, 할 수 있는 건 이것뿐이에요. 1개의 파일에서 2개의 다른 결과를 얻는 방법은 무엇입니까?

그래서 파일을 처음 열 때 특정 내용이 표시되기를 원하고, 파일로 돌아가서 다시 열면 다른 내용이 표시되기를 원합니다. 그러나 두 내용은 모두 동일한 파일에 있습니다. 첫 번째 방문 시 하나의 콘텐츠를 읽고, 재방문 시 두 번째 콘텐츠를 읽으세요.

두 개의 별도 출력을 하나의 파일로 출력할 수 있습니까? 예를 들어, 아래 파일을 처음 실행하면 "sup sep" 응답을 받고, 두 번째 실행하면 "no no" 응답을 받게 됩니다. 이것은 단지 예일 뿐이지만 이것이 제가 달성하려는 것입니다. 그렇다면 이것을 정확히 어떻게 관리해야 할까요?

this=1
if [ "$this"=="1" ]; then
echo "sup sup"
let "this=$this - 1"
fi
if [ "$this"=="0" ]; then
echo "no no"
fi

답변1

Bash 스크립트에서 이 변수를 사용하면 $RANDOM호출할 때마다 다른 결과를 얻을 수 있습니다. 정수(0-32767)를 반환하지만 숫자가 짝수인지 홀수인지 테스트한 다음 예 또는 아니오로 설정할 수 있습니다.

$ echo $RANDOM
2104

$ echo $RANDOM
25188

짝수/홀수 예

$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
even
$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
even
$ if (( RANDOM % 2 )); then echo even; else echo odd; fi
odd

위의 코드는 모듈로 나누기 연산자를 사용하여 현재 $RANDOM숫자를 2로 나눕니다. $RANDOM짝수이면 "짝수" 메시지를 에코하고, 그렇지 않으면 "홀수" 메시지를 에코합니다 .

이는 스크립트에서 사용할 수 있는 "예" 또는 "아니요" 옵션으로 수정될 수 있습니다.

인용하다

답변2

파일에서 내용이 어떻게 배열되어 있는지에 따라 다르지만 스크립트에서 파일이 열려 있는지 여부만 추적하면 됩니다.

# Example where the first time opening, line 1 is printed, and subsequent times
# line 2 is printed
file_opened=0
# ... code
if [ $file_opened -eq 0 ]; then
    # code for first time opening, e.g.:
    head -1 the_file.txt # Prints line 1
    file_opened=1
else
    # code for subsequent times, e.g.:
    sed -n '2{p;q}' the_file.txt # Prints line 2
 fi

관련 정보