J'ai besoin de créer un script shell qui vérifie la présence d'un fichier et s'il n'existe pas, le crée et passe à la commande suivante, ou passe simplement à la commande suivante. Ce que j'ai ne fait pas ça.
#!/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 ...
Le retour est
line 5: [!: command not found
mkdir: /Scripts: File exists
Je ne sais pas quoi faire. Chaque endroit où une recherche Google m'amène indique quelque chose de différent.
bash
shell-script
osx
jrw
la source
la source
touch
le fichier et sauter le conditionnel?[
et!
), mais il est probablement utile de souligner ici qu'il[
s'agit d'une commande réelle sur Unix. Une commande Unix nécessite un espace entre le nom de la commande et ses arguments. Oui, c'est aussi un Bash intégré , mais il y a aussi un binaire/usr/bin/[
sur la plupart des systèmes.Réponses:
Solution peut-être plus simple, pas besoin de faire des tests explicites, utilisez simplement:
Si vous ne voulez pas que l'heure de "modification" d'un existant
file.txt
soit changéetouch
, vous pouvez utilisertouch -a /Scripts/file.txt
pour fairetouch
seulement changer les heures "d'accès" et "changer".la source
>>/Scripts/file.txt
. Cela ouvrira le fichier pour l'ajouter et le créera s'il n'existe pas.Vous obtenez l'erreur car il n'y a pas d'espace entre
[
et!
cependant il y a aussi quelques défauts dans votre code. Vous vérifiez d'abord si le fichier n'existe pas, et sinon vous ne faites rien. Si le fichier existe, vous créez un répertoire (mais vous ne faites rien pour créer le fichier).Vous n'avez pas non plus besoin de l'opération null, vous devriez pouvoir simplement faire:
Ceci vérifie s'il
/Scripts/file.txt
n'existe pas, il créera le/Scripts
répertoire puis lefile.txt
fichier. Vous pouvez également vérifier l'existence du répertoire séparément si vous le souhaitez. De plus, notez que j'utilise-e
au lieu de-f
comme vous l'avez demandé simplement pour vérifier l'existence d'un fichier qui est ce-e
qui fera où-f
vérifie qu'il s'agit d'un "fichier normal" http://tldp.org/LDP/abs/html/fto. htmlla source
Pour commencer, le script shell n'est pas un script bash , alors rendons votre code plus général:
Chaque système Posix doit avoir ce fichier; bash est strictement facultatif.
Pas besoin de tester si le répertoire existe, juste
Pour créer le fichier s'il n'existe pas,
Ou si vous préférez,
la source
Vous avez une erreur syntaxique. Vous avez besoin d'espaces avant et après le
[
et]
.la source
Ce qui précède suppose qu'il n'y a pas de "trucs" tels que la création d'un répertoire appelé
/Scripts/file.txt
(ce qui pourrait être un moyen de forcer le script à toujours entrer dans la branche if). Si le "fichier" est un répertoire, le test -f échouera et la commande tactile ne changera rien.la source
mon approche
production
.
la source
touch
etmkdir -p