jrw*_*jrw 41 osx bash shell-script
我需要创建一个 shell 脚本来检查文件是否存在,如果文件不存在,则创建它并继续执行下一个命令,或者只是继续执行下一个命令。我所拥有的不会那样做。
#!/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 ...
Run Code Online (Sandbox Code Playgroud)
回报是
line 5: [!: command not found
mkdir: /Scripts: File exists
Run Code Online (Sandbox Code Playgroud)
不知道该怎么办。谷歌搜索给我带来的每个地方都表明了一些不同的东西。
xen*_*oid 60
可能更简单的解决方案,无需进行显式测试,只需使用:
mkdir -p /Scripts
touch /Scripts/file.txt
Run Code Online (Sandbox Code Playgroud)
如果你不希望的现有的“修改”时间file.txt被改变touch,你可以用touch -a /Scripts/file.txt做touch只改变“准入”和“变”时代。
jes*_*e_b 36
您收到错误是因为它们之间没有空格[,!但是您的代码中也存在一些缺陷。首先,您正在检查该文件是否不存在,如果不存在,则您什么都不做。如果文件确实存在,则您正在创建一个目录(但不执行任何操作来创建文件)。
您也不需要空操作,您应该能够简单地执行以下操作:
#! /bin/bash -
if [[ ! -e /Scripts/file.txt ]]; then
mkdir -p /Scripts
touch /Scripts/file.txt
fi
[command2]
Run Code Online (Sandbox Code Playgroud)
这是检查是否/Scripts/file.txt不存在它将创建/Scripts目录然后创建file.txt文件。如果需要,您还可以单独检查目录是否存在。另外请注意,我正在使用-e而不是-f像您要求的那样简单地检查文件是否存在,这-e将在-f检查它是“常规文件” http://tldp.org/LDP/abs/html/fto 时执行。 html
Jam*_*den 21
首先,shell script不是bash script,所以让我们让你的代码更通用:
#!/bin/sh
Run Code Online (Sandbox Code Playgroud)
每个 Posix 系统都必须有那个文件;bash 是严格可选的。
无需测试目录是否存在,只需
dir=/Scripts
mkdir -p $dir
Run Code Online (Sandbox Code Playgroud)
如果文件不存在,则创建文件,
filename=$dir/file.txt
test -f $filename || touch $filename
Run Code Online (Sandbox Code Playgroud)
或者,如果您愿意,
filename=$dir/file.txt
if [ ! -f $filename ]
then
touch $filename
fi
Run Code Online (Sandbox Code Playgroud)