ファイルの存在を確認するシェルスクリプトを作成する必要があります。ファイルが存在しない場合は、ファイルを作成して次のコマンドに進むか、単に次のコマンドに進みます。私が持っているものはそれをしません。
#!/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
何をすべきかわからない。グーグル検索が私をもたらすあらゆる場所は、異なる何かを示します。
おそらくより簡単なソリューションで、明示的なテストを行う必要はありません。使用するだけです。
mkdir -p /Scripts
touch /Scripts/file.txt
既存のfile.txt
の「変更」時刻をtouch
で変更したくない場合は、touch -a /Scripts/file.txt
を使用してtouch
のみを変更できますアクセス」と「変更」の時間。
_[
_と_!
_の間にスペースがないため、エラーが発生しますが、コードにもいくつかの欠陥があります。最初に、ファイルが存在しないかどうかを確認し、存在しない場合は何もしていません。ファイルが存在する場合は、ディレクトリを作成しています(ただし、ファイルを作成するために何もしていません)。
また、null演算は必要ありません。単純に次のことができるはずです。
_#! /bin/bash -
if [[ ! -e /Scripts/file.txt ]]; then
mkdir -p /Scripts
touch /Scripts/file.txt
fi
[command2]
_
これは、_/Scripts/file.txt
_が存在しないかどうかをチェックし、_/Scripts
_ディレクトリを作成してから、_file.txt
_ファイルを作成します。必要に応じて、ディレクトリの存在を個別に確認することもできます。さらに、私は_-e
_の代わりに_-f
_を使用していることに注意してください。_-e
_がファイルの存在を確認するために_-f
_がそれが「通常のファイル」 http://tldp.org/LDP/abs/html/fto.html
まず、シェルスクリプトはbashスクリプトではないので、コードをより一般的にしましょう。
#!/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
構文エラーがあります。 [
と]
の前後にはスペースが必要です。
#!/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
と呼ばれるdirectoryを作成するような「トリック」がないことを前提としています(これはcouldがスクリプトに常にifを入力させる方法です)ブランチ)。 「ファイル」がディレクトリの場合、-fテストは失敗し、touchコマンドは何も変更しません。
私のアプローチ
#!/bin/sh
# input might contains spaces and other characters
FILEPATH="/tmp/some where/the file.blah"
# extract the file + dir names
FILE="`basename "${FILEPATH}"`"
DIR="`dirname "${FILEPATH}"`"
# create the dir, then the file
mkdir -p "${DIR}" && touch "${DIR}/${FILE}"
# show result
ls -l "$FILEPATH"
出力
./dofile.sh
-rw-r--r-- 1 jmullee jmullee 0 Nov 15 21:23 /tmp/some where/the file.blah
。