Erreur de script shell Unix dans crontab

J’essaie de planifier mon script shell mais quand il a déclenché pour traiter une tâche planifiée, il y a cette invite d’erreur. mais quand aucun fichier ne doit être traité, il affiche simplement la commande echo.

voici mon code:

if [ "$(ls -A $path)" ] then for file_name in "$path"/*; do filebasename=$(basename "$file_name") prefix=${filebasename:0:4}; if [ "$prefix" == "abcd" ] ; then mv "$file_name" "$out" fi done else echo "No files available at $path" fi 

et c’est l’erreur:

 SH:prefix=${filebasename:0:4}:0403-011 The specified substitution is not valid for this command 

Vous pouvez écrire votre code plus simplement de cette manière:

 #!/bin/bash count=0 if [[ -d "$path" ]]; then for file_name in "$path"/abcd*; do [[ -f "$file_name" ]] && { ((count++)); mv "$file_name" "$out"; } done fi if ((count == 0)); then echo "No files available at $path" fi 

Les avantages:

  • Pas besoin d’parsingr la sortie de ls
  • Pas besoin de faire de nom de base + sous-chaîne pour chaque fichier
  • Ignore tous les répertoires dont le nom commence par abcd

Si vous n’êtes pas intéressé à savoir s’il y a des fichiers correspondants ou non, le tout peut être écrit sur une seule ligne:

 find "$path" -name "abcd*" -type f -exec mv "{}" "$out" \; 

J’utilise ce code: prefix = $ (echo $ {filebasename} | cut -c1-4)

au lieu de préfixe = $ {filebasename: 0: 4};

maintenant il fonctionne complètement dans mon travail cron et aucune erreur comme dit précédemment. Merci pour l’aide les gars ! 🙂