ファイルが存在しない場合、シェルスクリプトはファイルを生成しますか?

ファイルが存在しない場合、シェルスクリプトはファイルを生成しますか?

ファイルが存在することを確認しない場合は、ファイルを作成して次のコマンドを続行するか、次のコマンドを続行するシェルスクリプトを作成する必要があります。私が持っていることはそのようなことをしません。

#!/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

間にスペースがないためエラーが発生します[が、!コードにもいくつかの欠陥があります。まず、ファイルが存在しないことを確認し、存在しない場合は何もしません。ファイルが存在する場合はディレクトリを作成します(ただし、ファイルを作成するために何もしません)。

ヌル操作も必要なく、次のように簡単に実行できます。

#! /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コマンドは何も変更しません。

関連情報