use switch case for options and use variables
authorrick <rick@gnous.eu>
Wed, 22 Feb 2023 23:56:24 +0000 (00:56 +0100)
committerrick <rick@gnous.eu>
Wed, 22 Feb 2023 23:56:24 +0000 (00:56 +0100)
use variables instead of pure texts in help and script.

generate.sh

index 80de37b3859a4262fb0b77cc7bf320959bde6f37..a5dec9ab672f19add8f4db4bab616ba8ca7f7b14 100755 (executable)
@@ -21,7 +21,6 @@
 set -e
 
 # liste des fichiers html à générer
-#files="autres.html copaings.html index.html ou.html projets.html rss.html apropos.html"
 langDir="lang"
 tmpHeader="/tmp/header.html"
 annexes="css img"
@@ -39,24 +38,70 @@ org=1
 function print_help {
     cat << EOF
 Utilisation :
generate.sh [options] [<dossier>]
$(basename $0) [options] [<dossier>]
 
 génère les fichiers HTML du site. Il est possible de changer le dossier de
-destination (www par défaut).
+destination ($target par défaut).
 
 Options :
- -h  génère ce message et arrête le script.
+ -h  génère ce message et arrête le script
  -c  nettoie les fichiers générés
  -o  ne génère pas les fichiers org
  -t  lance un docker pour pouvoir tester le site
 
 Les options suivantes seront codées dans un futur proche :
- -d  défini la langue par défaut (son index sera mit à la racine); fr par défaut
- -n  génère la langue dans le nom du fichier et non dans le chemin.
+ -d  défini la langue par défaut (son index sera mit à la racine);
+     fr par défaut
+ -n  génère la langue dans le nom du fichier et non dans le chemin
      (example.org/fr/index.html -> example.org/index.fr.html)
 EOF
 }
 
+# pas besoin de continuer si on demande juste l'aide
+if [[ $@ =~ "-h" ]]
+then
+    print_help
+    exit 0
+fi
+
+# vérification des arguments passés
+while [ -n "$1" ]
+do
+    case $1 in
+    "-o") # pas de génération des fichiers org
+        org=0
+        ;;
+    "-c") # on nettoie les fichiers
+        # TODO si on précise un dossier, nettoyer ce dossier
+        echo "Nettoyage de $target"
+        rm -rf $target
+        exit 0
+        ;;
+    "-t") # lancer un docker de test
+        docker build . --tag site && echo -e \
+            "\n\033[32mSite de test déployé sur l'adresse" \
+            "localhost:8080\033[0m" || exit 1
+        echo -e "\033[32mC-c pour quitter\033[0m\n"
+
+        docker run --rm -p 8080:80 site
+        docker rmi site
+        exit 0
+        ;;
+    "-d") ;&
+    "-n")
+        echo "Commande non implémentée."
+        exit 1
+        ;;
+    "-"*)
+        print_help
+        exit 2
+        ;;
+    *) target=$1 ;;
+    esac
+
+    shift
+done
+
 ###############################################################################
 # Génère un fichier header propre à une langue
 #
@@ -88,36 +133,6 @@ function generate_header {
     echo -e "        </div>\n" >> $tmpHeader
 }
 
-# vérification des arguments passés
-if [[ $@ =~ "-h" ]]
-then
-    print_help
-    exit 0
-fi
-
-if [[ $@ =~ "-c" ]]
-then
-    rm -rf www
-    exit 0
-fi
-
-if [[ $@ =~ "-t" ]]
-then
-    docker build . --tag site && echo -e \
-        "\n\033[32mSite de test déployé sur l'adresse localhost:8080\033[0m" \
-        || exit 1
-    echo -e "\033[32mC-c pour quitter\033[0m\n"
-
-    docker run --rm -p 8080:80 site
-    docker rmi site
-    exit 0
-fi
-
-if [[ $@ =~ "-o" ]]
-then
-    org=0
-fi
-
 if [ -d $target ]
 then
     # TODO demander à l'utilisateur
@@ -159,8 +174,7 @@ do
             sed -i -e "/%links%/a$newHeader" $file
         fi
 
-        cat $langDir/$l/$i >> $file
-        cat $footer >> $file
+        cat $langDir/$l/$i $footer >> $file
         # nettoyage des balises précédemment utilisées
         sed -i -e "/%links%/d" $file
         sed -i -e "/%link%/,/%endlink%/d" $file
@@ -174,6 +188,7 @@ do
 done
 
 echo "Header links translation..."
+# cf. la page info 4.2 du manuel Bash (transforme un fichier en tableau)
 mapfile translateHeader < $langDir/links.config
 langs=${translateHeader[0]}
 nbLang=$(echo "$langs" | grep -c "|")
@@ -219,7 +234,7 @@ for c in $(awk 'BEGIN {
                     } if (code) {
                         print NR
                     }
-                }' www/index.html)
+                }' $target/index.html)
 do
    sed -i -e "$c s/href=\"/href=\"$defaultLang\//" $target/index.html
 done