Necesito crear un script de shell que verifique la presencia de un archivo y, si no existe, lo crea y pasa al siguiente comando, o simplemente pasa al siguiente comando. Lo que tengo no hace eso.
#!/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 ...
El retorno es
line 5: [!: command not found
mkdir: /Scripts: File exists
Ni idea de qué hacer. Cada lugar que me trae una búsqueda de Google indica algo diferente.
bash
shell-script
osx
jrw
fuente
fuente
touch
el archivo y omitir el condicional?[
y!
), pero probablemente sea útil señalar aquí que[
es un comando real en Unix. Un comando Unix requiere un espacio en blanco entre el nombre del comando y sus argumentos. Sí, también es un Bash incorporado , pero también hay un binario en la/usr/bin/[
mayoría de los sistemas.Respuestas:
Posiblemente una solución más simple, no es necesario hacer pruebas explícitas, solo use:
Si no desea que el tiempo de "modificación" de una ya existente
file.txt
que ser cambiado portouch
, se puede utilizartouch -a /Scripts/file.txt
para hacertouch
solamente cambiar el "acceso" y "tiempos de cambio".fuente
>>/Scripts/file.txt
. Esto abrirá el archivo para agregarlo y crearlo si no existe.Obtiene el error porque no hay espacio entre ellos
[
y,!
sin embargo, también hay algunos defectos en su código. Primero está verificando si el archivo no existe, y si no está haciendo nada. Si el archivo sí existe, está creando un directorio (pero no está haciendo nada para crear el archivo).Tampoco necesita la operación nula, simplemente debería poder hacer:
Esto está comprobando si
/Scripts/file.txt
no existe, creará el/Scripts
directorio y luego elfile.txt
archivo. También puede verificar la existencia del directorio por separado si lo desea. Además, observe que estoy usando en-e
lugar de lo-f
que me pidió, simplemente para verificar la existencia de un archivo, que es lo-e
que hará cuando-f
verifique que es un "archivo normal" http://tldp.org/LDP/abs/html/fto. htmlfuente
Para empezar, el script de shell no es bash script , así que hagamos que su código sea más general:
Todos los sistemas Posix deben tener ese archivo; bash es estrictamente opcional.
No es necesario probar si el directorio existe, solo
Para crear el archivo si no existe,
O si lo prefieres
fuente
Tienes un error sintáctico. Necesita espacios antes y después de
[
y]
.fuente
Lo anterior supone que no hay "trucos", como crear un directorio llamado
/Scripts/file.txt
(que podría ser una forma de obligar al script a ingresar siempre la rama if). Si el "archivo" es un directorio, la prueba -f fallará y el comando táctil no cambiará nada.fuente
mi acercamiento
salida
.
fuente
touch
emkdir -p