파일이 존재하지 않으면 쉘 스크립트가 파일을 생성합니까?

파일이 존재하지 않으면 쉘 스크립트가 파일을 생성합니까?

파일이 있는지 확인하고, 없으면 파일을 만들고 다음 명령을 계속하거나 다음 명령을 계속하는 셸 스크립트를 만들어야 합니다. 내가 가진 것은 그런 일을 하지 않습니다.

#!/bin/bash

# Check for the file that gets created when the script successfully finishes.
if [! -f /Scripts/file.txt]
then
: # Do nothing. Go to the next step?
else
mkdir /Scripts # file.txt will come at the end of the script
fi

# Next command (macOS preference setting)
defaults write ...

반환되는 것은

line 5: [!: command not found
mkdir: /Scripts: File exists

무엇을 해야할지 모르겠습니다. Google 검색을 통해 가져온 모든 장소에는 다른 내용이 표시되었습니다.

답변1

명시적인 테스트 없이 더 간단한 솔루션은 다음을 사용하면 됩니다.

mkdir -p /Scripts
touch /Scripts/file.txt

file.txt기존 "수정" 시간을 변경 하고 싶지 않다면 make를 사용하여 "액세스" 및 "변경" 시간만 변경할 touch수 있습니다 .touch -a /Scripts/file.txttouch

답변2

사이에 공백이 없기 때문에 오류가 발생 [하지만 !코드에도 몇 가지 결함이 있습니다. 먼저 파일이 존재하지 않는지 확인하고 존재하지 않으면 아무것도 하지 않습니다. 파일이 존재하는 경우 디렉토리를 생성하는 것입니다(그러나 파일을 생성하기 위해 아무 작업도 수행하지 않음).

Null 작업도 필요하지 않으며 다음과 같이 간단하게 수행할 수 있습니다.

#! /bin/bash -
if [[ ! -e /Scripts/file.txt ]]; then
    mkdir -p /Scripts
    touch /Scripts/file.txt
fi

[command2]

존재 하지 않는지 확인하고 디렉터리를 만든 다음 파일을 /Scripts/file.txt만듭니다 . 필요한 경우 디렉터리 존재 여부를 개별적으로 확인할 수도 있습니다. 또한 요청하신대로 파일이 있는지 단순히 확인하는 대신 "일반 파일"인지 확인하면서 수행 됩니다./Scriptsfile.txt-e-f-e-fhttp://tldp.org/LDP/abs/html/fto.html

답변3

첫 번째,쉘 스크립트아니요배쉬 스크립트, 코드를 좀 더 일반화해 보겠습니다.

#!/bin/sh

이 파일은 모든 Posix 시스템에 필요합니다. bash는 엄격히 선택 사항입니다.

디렉토리가 존재하는지 테스트할 필요가 없습니다.

dir=/Scripts
mkdir -p $dir

파일이 존재하지 않는 경우 생성하려면,

filename=$dir/file.txt
test -f $filename || touch $filename

아니면 원하신다면,

filename=$dir/file.txt
if [ ! -f $filename ]
then
    touch $filename
fi

답변4

#!/bin/bash

# Check for the file that gets created when the script successfully finishes.
CHECKFILE="/Scripts/file.txt"

CHECKDIR=$( dirname "$CHECKFILE" )

# The directory with the file must exist
mkdir -p "$CHECKDIR"
if [ ! -f "$CHECKFILE" ]; then
    # What to do if the file is not there
fi
touch "$CHECKFILE"

위의 내용은 생성과 같은 "트릭"이 없다고 가정합니다.목차/Scripts/file.txt(어디서 ?할 수 있다스크립트가 항상 if 분기에 들어가도록 하는 방법입니다. "file"이 디렉토리인 경우 -f 테스트는 실패하고 touch 명령은 아무것도 변경하지 않습니다.

관련 정보