J'essaie d'automatiser le déplacement automatique des fichiers d'un dossier vers un nouveau dossier tous les soirs à l'aide d'un script bash exécuté à partir d'AppleScript selon un calendrier. J'essaie d'écrire un script bash sur Mac OSX, et il échoue toujours. En bref, voici ce que j'ai (tous mes echo
sont pour la vérification des erreurs):
#!/bin/bash
folder = "ABC"
useracct = 'test'
day = date "+%d"
month = date "+%B"
year = date "+%Y"
folderToBeMoved = "/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername = "/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir $newfoldername
cp -R $folderToBeMoved $newfoldername
if [-f $newfoldername/Primetime.eyetv];
then rm $folderToBeMoved;
fi
Maintenant, mon premier problème est que je ne peux pas du tout définir de variables. Même les littéraux où je le fais juste égal à un littéral. Tous mes echo
sont vides. Je ne peux pas non plus saisir le jour, le mois ou l'année, il est également vierge.
Je reçois une erreur indiquant que -f est introuvable.
Je reçois une erreur indiquant une fin de fichier inattendue.
J'ai créé le fichier et fait un chmod u+x scriptname.sh
Je ne sais pas pourquoi rien ne fonctionne du tout. Je suis très nouveau dans ce script bash sur OSX et n'ai qu'une expérience avec Windows VBScript. Toute aide serait formidable, merci!
L'affectation dans les scripts bash ne peut pas avoir d'espaces autour du =
Et vous voulez probablement que vos commandes de date soient incluses dans astuces $()
:
#!/bin/bash
folder="ABC"
useracct='test'
day=$(date "+%d")
month=$(date "+%B")
year=$(date "+%Y")
folderToBeMoved="/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername="/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir $newfoldername
cp -R $folderToBeMoved $newfoldername
if [-f $newfoldername/Primetime.eyetv]; then rm $folderToBeMoved; fi
Avec les trois dernières lignes commentées, pour moi, cela produit:
Network is
day is 16
Month is March
YEAR is 2010
source is /users/test/Documents/Archive/Primetime.eyetv
dest is /Volumes/Media/Network/ABC/March162010
Cinq problèmes:
"$(...)"
pour obtenir la sortie d'une commande sous forme de texte.[
est une commande. Mettez un espace entre lui et les arguments.echo
.rm "$folderToBeMoved"
voici votre script modifié
#!/bin/bash
folder="ABC" #no spaces between assignment
useracct='test'
day=$(date "+%d") # use $() to assign return value of date command to variable
month=$(date "+%B")
year=$(date "+%Y")
folderToBeMoved="/users/$useracct/Documents/Archive/Primetime.eyetv"
newfoldername="/Volumes/Media/Network/$folder/$month$day$year"
ECHO "Network is $network" $network
ECHO "day is $day"
ECHO "Month is $month"
ECHO "YEAR is $year"
ECHO "source is $folderToBeMoved"
ECHO "dest is $newfoldername"
mkdir "$newfoldername"
cp -R "$folderToBeMoved" "$newfoldername"
if [ -f "$newfoldername/Primetime.eyetv" ]; then # <-- put a space at square brackets and quote your variables.
rm "$folderToBeMoved";
fi
folder = "ABC"
essaie d'exécuter une commande nommée folder
avec des arguments =
et "ABC"
. Le format de la commande en bash est:
command arguments separated with space
tandis que l'affectation se fait avec:
variable=something
[ -f $newfoldername/Primetime.eyetv]
, [
est une commande (test
) et -f
et $newfoldername/Primetime.eyetv]
sont deux arguments. Il attend un troisième argument (]
) qu'il ne peut pas trouver (les arguments doivent être séparés par un espace) et affichera donc une erreur.[-f $newfoldername/Primetime.eyetv]
essaie d'exécuter une commande [-f
avec l'argument $newfoldername/Primetime.eyetv]
Généralement pour des cas comme celui-ci, collez votre code dans shellcheck et consultez les commentaires.