Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
tutoriel:script_shell [Le 07/10/2019, 13:55]
BugFollower [Méthode dans un terminal]
tutoriel:script_shell [Le 28/02/2024, 22:59]
105.74.9.77 [Liens]
Ligne 1: Ligne 1:
 {{tag>​programmation script shell console tutoriel}} {{tag>​programmation script shell console tutoriel}}
----+ 
 +----
  
 ====== Introduction aux scripts shell ====== ====== Introduction aux scripts shell ======
  
-Un script shell permet d'​automatiser une série d'​opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle.  +Un script shell permet d'​automatiser une série d'​opérations. Il se présente sous la forme d'un fichier contenant une ou plusieurs commandes qui  seront exécutées de manière séquentielle. Fantastique
-<​code>​+<​code ​bash>
 #!/bin/bash #!/bin/bash
 # This script will take an animated GIF and delete every other frame # This script will take an animated GIF and delete every other frame
Ligne 12: Ligne 13:
  
 # Make a copy of the file # Make a copy of the file
-cp $1 $2+cp "$1" "$2"
  
 # Get the number of frames # Get the number of frames
-numframes=`gifsicle $1 -I | grep -P "\d+ images" ​--only-matching ​| grep -P "\d+" ​--only-matching`+numframes=$(gifsicle ​--info "$1" \ 
 +              ​| grep --perl-regexp ​--only-matching ​'\d+ images'​ \ 
 +              | grep --perl-regexp ​--only-matching ​'​\d+'​)
  
 # Deletion # Deletion
 let i=0 let i=0
-while [[ $i -lt $numframes ​ ​]]; ​do+while test $i -lt $numframes 
 +do
     rem=$(( $i % 2 ))     rem=$(( $i % 2 ))
  
-    if $rem -eq 0 ]+    if test $rem -eq 0
     then     then
-        gifsicle $2 --delete "#"​$(($i/​2)) -o $2 +        gifsicle ​"$2" ​--delete "#"​$(($i/​2)) -o "$2"
     fi     fi
  
Ligne 30: Ligne 34:
 done done
 </​code>​ </​code>​
-=====Pour faire qu'un script soit exécutable ===== 
  
 +=====Pour faire qu'un script soit exécutable =====
 ==== Méthode graphique ==== ==== Méthode graphique ====
  
 Votre script est un simple fichier texte, par défaut il s'​ouvre donc avec l'​éditeur de texte défini par défaut (ex : [[:​gedit|Gedit]] dans une session Unity ou Gnome).\\ Votre script est un simple fichier texte, par défaut il s'​ouvre donc avec l'​éditeur de texte défini par défaut (ex : [[:​gedit|Gedit]] dans une session Unity ou Gnome).\\
-Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés.\\ +Pour qu'il soit autorisé à se lancer en tant que programme, il faut modifier ses propriétés.
 Pour cela faites un clic droit sur son icône, et dans l'​onglet "​Permissions"​ des "​Propriétés",​ cocher la case //"​autoriser l'​exécution du fichier comme un programme"//​. Pour cela faites un clic droit sur son icône, et dans l'​onglet "​Permissions"​ des "​Propriétés",​ cocher la case //"​autoriser l'​exécution du fichier comme un programme"//​.
  
Ligne 52: Ligne 56:
 ==== Méthode dans un terminal ==== ==== Méthode dans un terminal ====
  
-Il suffit de se placer dans le dossier où est le script, et de lancer : <​code>​bash nom_du_script</​code>​+Il suffit de se placer dans le dossier où est le script, et de lancer : <​code ​bash>bash nom_du_script</​code>​
 mais pas toujours bash ( dépend du langage du script ) mais pas toujours bash ( dépend du langage du script )
  
-ou si vous voulez l'​exécuter par son  nom , il faut le rendre exécutable avec ''​chmod''​. Pour ceci tapez la commande qui suit : <​code>​chmod +x nom_du_script</​code>​+ou si vous voulez l'​exécuter par son  nom , il faut le rendre exécutable avec ''​chmod''​. Pour ceci tapez la commande qui suit : <​code ​bash>chmod +x nom_du_script</​code>​
  
-Puis vous pouvez exécuter le script en faisant : <​code>​./​nom_du_script</​code>​+Puis vous pouvez exécuter le script en faisant : <​code ​bash>​./​nom_du_script</​code>​
 mais pourquoi le ./ ? mais pourquoi le ./ ?
 +
 === Le chemin ./ === === Le chemin ./ ===
  
Ligne 73: Ligne 78:
  
 Ajouter un répertoire au PATH peut donc être très pratique. Par convention, ce répertoire s'​appelle **bin** et se place dans votre répertoire personnel. Si votre répertoire personnel est /home/toto, ce répertoire sera donc **/​home/​toto/​bin**. Ajouter un répertoire au PATH peut donc être très pratique. Par convention, ce répertoire s'​appelle **bin** et se place dans votre répertoire personnel. Si votre répertoire personnel est /home/toto, ce répertoire sera donc **/​home/​toto/​bin**.
-Pour pouvoir utiliser ​mes scripts en tapant directement leur nom (sans le "​./"​) depuis n'​importe quel répertoire de mon ordinateur, il me suffit d'​indiquer au shell de chercher aussi dans ce nouveau dossier en l'​ajoutant au PATH.+Pour pouvoir utiliser ​vos scripts en tapant directement leur nom (sans le "​./"​) depuis n'​importe quel répertoire de votre ordinateur, il vous suffit d'​indiquer au shell de chercher aussi dans ce nouveau dossier en l'​ajoutant au PATH.
 Pour ceci, il suffit de faire : Pour ceci, il suffit de faire :
   export PATH=$PATH:​$HOME/​bin   export PATH=$PATH:​$HOME/​bin
Ligne 93: Ligne 98:
  
   * [[wpfr>​Debian_Almquist_shell|dash]] (//Debian Almquist shell//) : shell plus léger que bash, installé par défaut sur Ubuntu ;   * [[wpfr>​Debian_Almquist_shell|dash]] (//Debian Almquist shell//) : shell plus léger que bash, installé par défaut sur Ubuntu ;
-  * bash (//Bourne Again SHell//) : conçu par le projet GNU, shell linux ; le shell par défaut sur Ubuntu ;+  * [[:bash]] (//Bourne Again SHell//) : conçu par le projet GNU, shell linux ; le shell par défaut sur Ubuntu ;
   * rbash : un shell restreint basé sur bash. Il existe de nombreuses variantes de bash ;   * rbash : un shell restreint basé sur bash. Il existe de nombreuses variantes de bash ;
   * csh, tcsh : shells C, créés par Bill Joy de Berkeley ;   * csh, tcsh : shells C, créés par Bill Joy de Berkeley ;
Ligne 99: Ligne 104:
   * ksh (<=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[http://​en.wikipedia.org/​wiki/​Korn_shell#​History|Korn shell History]]): shells korn écrits par David Korn, pdksh (Public Domain Korn Shell <=> ksh88) ;   * ksh (<=> ksh88 sur Solaris et équivaut à ksh93 sur les autres UNIX/Linux cf.[[http://​en.wikipedia.org/​wiki/​Korn_shell#​History|Korn shell History]]): shells korn écrits par David Korn, pdksh (Public Domain Korn Shell <=> ksh88) ;
   * rc : shell C, lui aussi conçu par le projet GNU ;   * rc : shell C, lui aussi conçu par le projet GNU ;
-  * tclsh : shell utilisant Tcl ;                         +  * tclsh : shell utilisant Tcl ; 
-  * wish : shell utilisant Tk .      +  * wish : shell utilisant Tk .
  
 Il existe bien entendu beaucoup d'​autres types de shells.\\ Pour savoir quel type de shell est présent sur une machine, aller dans un terminal et taper la commande **ps**. Il existe bien entendu beaucoup d'​autres types de shells.\\ Pour savoir quel type de shell est présent sur une machine, aller dans un terminal et taper la commande **ps**.
  
 La commande **sh** est en fait un lien symbolique vers l'​interpréteur de commandes par défaut : **/​bin/​dash**. La commande **sh** est en fait un lien symbolique vers l'​interpréteur de commandes par défaut : **/​bin/​dash**.
 +
 ===== Les variables ===== ===== Les variables =====
 Il faut savoir que en bash les variables sont toutes des chaînes de caractères.\\ Il faut savoir que en bash les variables sont toutes des chaînes de caractères.\\
-Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur : +Cela dépendra de son USAGE, pour une opération arithmétique prochaine voir : let ma_variable sinon pour conserver une valeur :
 il suffit de lui donner un nom et une valeur avec l'​affectation égale : il suffit de lui donner un nom et une valeur avec l'​affectation égale :
 <code bash> <code bash>
Ligne 115: Ligne 121:
 Attention: pas d'​espace ni avant ni après le signe "​="​ .\\ Attention: pas d'​espace ni avant ni après le signe "​="​ .\\
 Autre exemple avec une commande avec arguments : Autre exemple avec une commande avec arguments :
-<​code>​nbre_lignes=$(wc -l < fichier.ext)</​code>​+<​code ​bash>​nbre_lignes=$(wc -l < fichier.ext)</​code>​
 //​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ . //​nbre_lignes//​ contiendra le nombre de lignes contenu dans //​fichier.ext//​ .
  
Ligne 130: Ligne 136:
  
 Et avec des chemins de répertoires : Et avec des chemins de répertoires :
-<​code>​+<​code ​bash>
 chemin_de_base="/​home/​username/​un repertoire avec espaces"​ chemin_de_base="/​home/​username/​un repertoire avec espaces"​
 chemin_complet="​$chemin_de_base/​repertoire"​ chemin_complet="​$chemin_de_base/​repertoire"​
 </​code>​ </​code>​
-<note important>​Comme on le voit ci-dessus si on met une chaîne de caractères avec des espaces entre guillemets, la variable la prend bien mais attention à l'​utiliser aussi avec des guillemets… <​code>​rsync -av "​$chemin_complet"​ …</​code>​sinon les espaces reprennent leurs rôles de séparateur!</​note>​+<note important>​Comme on le voit ci-dessus si on met une chaîne de caractères avec des espaces entre guillemets, la variable la prend bien mais attention à l'​utiliser aussi avec des guillemets… <​code ​bash>rsync -av "​$chemin_complet"​ …</​code>​sinon les espaces reprennent leurs rôles de séparateur!</​note>​
 Des variables système permettent d'​accélérer la saisie et la compréhension. Des variables système permettent d'​accélérer la saisie et la compréhension.
 Pour voir les variables d'​environnement de votre système tapez simplement : Pour voir les variables d'​environnement de votre système tapez simplement :
Ligne 174: Ligne 180:
 </​code>​ </​code>​
  
-Exemple: un sleep interactif pour illustrer $! (Cf. [[:​tutoriel:​script_shell#​les_fonctions|les fonctions]]) . +Exemple: un sleep interactif pour illustrer $! (Cf. [[:​tutoriel:​script_shell#​les_fonctions|les fonctions]]).\\ 
- +
 Pour déclarer un tableau, plusieurs méthodes : Pour déclarer un tableau, plusieurs méthodes :
- 
 première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "​sh"​) : première méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "​sh"​) :
 <code bash>​tab=("​John Smith" "Jane Doe"​)</​code>​ <code bash>​tab=("​John Smith" "Jane Doe"​)</​code>​
Ligne 191: Ligne 194:
 <code bash> <code bash>
 len=${#​tab[*]} ou echo ${#tab[@]} len=${#​tab[*]} ou echo ${#tab[@]}
- 
 </​code>​ </​code>​
  
Ligne 205: Ligne 207:
 ou encore ( C style ) : ou encore ( C style ) :
 <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</​code>​ <code bash>for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done</​code>​
- 
  
  
Ligne 214: Ligne 215:
 renverront la même réponse. renverront la même réponse.
  
-NB2 : les tableaux sont séparés par un séparateur défini : l'IFS.  +NB2 : les tableaux sont séparés par un séparateur défini : l'​IFS. 
-Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne. ​+Par défaut l'IFS est composé des trois caractères : $' \t\n' soit espace, tabulation, saut de ligne.
 Il peut être forcé sur un autre caractère. Il peut être forcé sur un autre caractère.
 <code bash>​IFS=$SEPARATEUR</​code>​ <code bash>​IFS=$SEPARATEUR</​code>​
Ligne 222: Ligne 223:
   * une ponctuation (pe : ',',​ '​.',​ '​-'​...)   * une ponctuation (pe : ',',​ '​.',​ '​-'​...)
   * un caractère spécial : ($'​\t'​ : tabulation, $'​\n'​ : saut de ligne,...)   * un caractère spécial : ($'​\t'​ : tabulation, $'​\n'​ : saut de ligne,...)
 +
 ==== Les arguments en ligne de commande ==== ==== Les arguments en ligne de commande ====
  
Ligne 250: Ligne 252:
     echo "Bien joué !"     echo "Bien joué !"
   else   else
-    echo "Non mais quand même !!! C'​ÉTAIT $1 ET NON PAS $Reslt ​PETIT FRIPON ​!!!" +    echo "Non mais quand même !!! SAPERLIPOPETTE ​C'​ÉTAIT $1 ET NON PAS $Reslt ​ESPECE DE NOUILLE ​!!!" 
-    sleep 3 # Juste pour le fun du script qui rage ;-p +    sleep 3 # Juste pour le fun du script qui enrage ​;-p 
-    echo "Donc je te bannis de ubuntu-fr.org ! Et toc !! Tu ne peux rien contre moi !!!"+    echo "Désolé, ​je te bannis de ubuntu-fr.org ! Et schbim ​!! Dommage tu ne peux rien contre moi !!!"
     exit 1     exit 1
   fi   fi
Ligne 258: Ligne 260:
 done done
 echo "Vous avez réussi !" echo "Vous avez réussi !"
 +</​code>​
 +
 +==== L'​arithmétique ====
 +<code bash>(( variable = 2 + $autre_var * 5 ))</​code>​
 +Exemple: besoin de définir des plages de valeurs (1 à 500 puis 501 à 1000 puis 1001 à 1500…)
 +<code bash>
 +id_per_step = 500
 +for (( i=0; i<8; i++ )); do
 + (( min_step_id = 1 + $i * $id_per_step ))
 + (( max_step_id = (( $i + 1 )) * $id_per_step ))
 + echo "​$min_step_id to $max_step_id "
 +done
 </​code>​ </​code>​
  
Ligne 362: Ligne 376:
  
 Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ». Pour pouvoir voir la valeur d'une variable il faut faire précéder son nom du caractère « $ ».
- 
- 
  
 <code bash> <code bash>
Ligne 373: Ligne 385:
     ls -la     ls -la
 elif [ "​$ouinon"​ = "​n"​ ] || [ "​$ouinon"​ = "​N"​ ]; then elif [ "​$ouinon"​ = "​n"​ ] || [ "​$ouinon"​ = "​N"​ ]; then
-    echo "​Ok, ​bye! "+    echo "​Ok, ​Aurevoir! "
 else else
     echo "Il faut taper Y ou N!! Pas $ouinon"​     echo "Il faut taper Y ou N!! Pas $ouinon"​
Ligne 401: Ligne 413:
  
 Exemple : Exemple :
-créer le répertoire ​toto s'il n' existe pas+créer le répertoire ​titi s'il n' existe pas
 <code bash> <code bash>
-[ ! -d /tmp/toto ] && mkdir /tmp/toto +[ ! -d /tmp/titi ] && mkdir /tmp/titi 
-[ -d /tmp/toto ] || mkdir /tmp/toto +[ -d /tmp/titi ] || mkdir /tmp/titi 
-test ! -d /tmp/toto && mkdir  /tmp/toto +test ! -d /tmp/titi && mkdir  /tmp/titi 
-rm -rf /tmp/toto;mkdir /tmp/toto+rm -rf /tmp/titi;mkdir /tmp/titi
 </​code>​ </​code>​
  
Ligne 439: Ligne 451:
 -n $A # Vérifie si A existe (contient une chaîne). -n $A # Vérifie si A existe (contient une chaîne).
 </​code>​ </​code>​
 +
 ==== Les structures while et until ==== ==== Les structures while et until ====
  
Ligne 518: Ligne 531:
 #!/bin/sh #!/bin/sh
   ​   ​
-echo -n "Etes-vous fatigué ? "+echo -n "Êtes-vous fatigué ? "
 read on read on
   ​   ​
 case "​$on"​ in case "​$on"​ in
-    oui | o | O | Oui | OUI ) echo "​Allez ​faire du café !";;+    oui | o | O | Oui | OUI ) echo "​Allez ​boire un Thé !";;
     non | n | N | Non | NON ) echo "​Programmez !";;     non | n | N | Non | NON ) echo "​Programmez !";;
     * ) echo "Ah bon ?";;     * ) echo "Ah bon ?";;
Ligne 534: Ligne 547:
 <code bash> <code bash>
 case "​$truc....."​ in case "​$truc....."​ in
-    [nN] *) echo "Blablabla...";;+    [nN] *) echo "Blablablabla...";;
     n* | N* ) echo "​Bla....";;​     n* | N* ) echo "​Bla....";;​
 </​code>​ </​code>​
Ligne 540: Ligne 553:
 Et plein d'​autres encore... Et plein d'​autres encore...
  
-== On mélange tout ça ==+=== On mélange tout ça ===
  
 Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions,​ Pour vous donner une idée précise de ce que peuvent réaliser toutes ces instructions,​
Ligne 567: Ligne 580:
 case $reps in case $reps in
   help | hlp )   help | hlp )
-     echo "propos de TS --> about"+     echo "À propos de TS --> about"
      echo "ls --> liste les fichiers"​      echo "ls --> liste les fichiers"​
      echo "rm --> détruit un fichier (guidé)"​      echo "rm --> détruit un fichier (guidé)"​
Ligne 598: Ligne 611:
 </​code>​ </​code>​
  
-== Remarque ==+=== Remarque ​===
  
 Comme vous l'avez remarqué, l'​indentation a une place importante dans Comme vous l'avez remarqué, l'​indentation a une place importante dans
Ligne 607: Ligne 620:
 ==== La structure for ==== ==== La structure for ====
  
-L'​instruction `for` exécute ce qui est dans son bloc un nombre de fois prédéfini. Sa syntaxe est la suivante :+L'​instruction `for` exécute ce qui est dans son bloc un nombre de fois prédéfini. Sa syntaxe est la suivante ​:
 <code bash> <code bash>
 for variable in valeurs; do for variable in valeurs; do
Ligne 614: Ligne 627:
 </​code>​ </​code>​
  
-Comme vous l'​aurez sans doute remarqué, on assigne une valeur différente à //​variable//​ à chaque itération. On peut aussi très facilement utiliser des fichiers comme "​valeur"​. Rien ne vaut un exemple :+ou le classique:​ 
 +<code bash> 
 +for (( i=$min; i<=$max; i++ )); do 
 +    instructions_avec_i # ou pas 
 +done 
 +</​code>​ 
 + 
 +Comme vous l'​aurez sans doute remarqué, on assigne une valeur différente à //​variable//​ à chaque itération. On peut aussi très facilement utiliser des fichiers comme "​valeur"​.\\ 
 +Rien ne vaut un exemple :
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 622: Ligne 643:
 </​code>​ </​code>​
  
-On peut voir une syntaxe un peu particulière : <code bash>​$(sort *.txt)</​code>​Ceci sert à +On peut voir une syntaxe un peu particulière : 
-indiquer que ce qui est entre les parenthèses est une commande à exécuter.+<code bash>​$(sort *.txt)</​code>​ 
 +Ceci sert à indiquer que ce qui est entre les parenthèses est une commande à exécuter.
  
-On peut aussi utiliser ​ +On peut aussi utiliser cette instruction simplement avec des nombres, cela permet de connaître le nombre d'​itérations :
-cette instruction simplement avec des nombres, cela permet de connaître le nombre d'​itérations :+
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 634: Ligne 655:
 </​code>​ </​code>​
  
-On peut très bien aussi utiliser d'​autres types de variables, comme par exemple des chaînes de  +On peut très bien aussi utiliser d'​autres types de variables, comme par exemple des chaînes de caractères :
-caractères :+
 <code bash> <code bash>
 #!/bin/sh #!/bin/sh
Ligne 674: Ligne 694:
 </​code>​ </​code>​
   ​   ​
-Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n'​importe quoi à une fonction. ​+Comme vous l'avez sans doute remarqué, quand on appelle la fonction, on exécute simplement ce qu'on lui a défini au début, dans notre exemple, echo... et ls -l, on peut donc faire exécuter n'​importe quoi à une fonction.
  
-Les fonctions peuvent être définies n'​importe ​ou dans le code du moment qu'elle sont définies avant d'​être utilisées. Même si en bash les variables sont globales, il est possible de les déclarer comme locales au sein d'un fonction en la précédant du mot clé local: local ma_fonction+Les fonctions peuvent être définies n'​importe ​où dans le code du moment qu'elles sont définies avant d'​être utilisées. Même si en bash les variables sont globales, il est possible de les déclarer comme locales au sein d'une fonction en la précédant du mot clé local: local ma_fonction ​.
  
-Exemple: ​Un sleep interactif.+Exemple: ​un sleep interactif ​:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
Ligne 701: Ligne 721:
  
  
-==== Extraire des sous chaines ​====+==== Extraire des sous-chaînes ​====
  
-Pour extraire une chaine ​d'​une ​chaine ​on utilise : **${ ''​chaine''​ : ''​position''​ : ''​nombre de caractères''​ }** (n'​oubliez pas le **:** qui sépare les "​paramètres"​).+Pour extraire une chaîne ​d'​une ​chaîne ​on utilise : **${ ''​chaîne''​ : ''​position''​ : ''​nombre de caractères''​ }** (n'​oubliez pas le **:** qui sépare les "​paramètres"​).
  
-<note important>​Dans la partie ''​chaine''​ pour faire référence à une variables ​**on ne met pas de $** ! Tandis que dans les autres options le $ est nécessaire (sauf si vous n'​utilisez pas de variable). Il y a de quoi s’emmêler les pinceaux. Si vous n'avez pas compris (ce n'est pas étonnant), les exemples de cette partie vous aideront beaucoup.</​note>​+<note important>​Dans la partie ''​chaîne''​ pour faire référence à une variable ​**on ne met pas de $** ! Tandis que dans les autres options le $ est nécessaire (sauf si vous n'​utilisez pas de variable). Il y a de quoi s’emmêler les pinceaux. Si vous n'avez pas compris (ce n'est pas étonnant), les exemples de cette partie vous aideront beaucoup.</​note>​
  
-Par exemple pour savoir ce que l'on aime manger en fonction de sa langue (vous êtes alors vraiment ultra geek 8-O !)+Par exemple pour savoir ce que l'on aime manger en fonction de sa langue (vous êtes alors vraiment ultra geek 8-O !) :
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
 #​favoritefood #​favoritefood
 if [ ${LANG:0:2} = "​fr"​ ]; then if [ ${LANG:0:2} = "​fr"​ ]; then
-    echo "Vous aimez les moules frites ​!"+    echo "Vous aimez la choucroute ​!"
 elif [ ${LANG:0:2} = "​en"​ ]; then elif [ ${LANG:0:2} = "​en"​ ]; then
-    echo "You love the... ​pudding ​!"+    echo "You love the... ​raclette ​!"
 elif [ ${LANG:0:2} = "​es"​ ]; then elif [ ${LANG:0:2} = "​es"​ ]; then
-    echo "Te gusta el jamón ​!" ​   ​+    echo "Te gusta el pata negra !" ​   ​
 else else
     echo ":'​-("​     echo ":'​-("​
Ligne 722: Ligne 742:
 #Noter que $LANG n'a pas le préfixe '​$'​. ${$LANG:​0:​2} ne fonctionne pas ! #Noter que $LANG n'a pas le préfixe '​$'​. ${$LANG:​0:​2} ne fonctionne pas !
 </​code>​ </​code>​
-puis +puis : 
-<​code>​+<​code ​bash>
 $ ./​favoritefood $ ./​favoritefood
-Vous aimez les moules frites ​!+Vous aimez la choucroute ​!
 $ env LANG=en ./​favoritefood $ env LANG=en ./​favoritefood
-You love the... ​pudding ​!+You love the... ​raclette!
 $ env LANG=es ./​favoritefood $ env LANG=es ./​favoritefood
-Te gusta el jamón ​!+Te gusta el pata negra!
 $ env LANG=it ./​favoritefood $ env LANG=it ./​favoritefood
 :'-( :'-(
 </​code>​ </​code>​
-Ce code illustre un moyen de faire des scripts multilingues+Ce code illustre un moyen de faire des scripts multilingues ​.
  
-Une variante permet de tronquer uniquement le début de la chaine. C'est **${ ''​chaine''​ : ''​nombre de caractères''​}**  +Une variante permet de tronquer uniquement le début de la chaîne. C'est **${ ''​chaîne''​ : ''​nombre de caractères''​}** ​.\\ 
-Le tout peut s'​illustrer par un (vraiment) petit exemple+Le tout peut s'​illustrer par un (vraiment) petit exemple ​:
 <code bash> <code bash>
 #!/bin/bash #!/bin/bash
-#truncbegin <chaine> <​nombre>​+#truncbegin <chaîne> <​nombre>​
 echo ${1:$2} echo ${1:$2}
 #Noter bien que echo ${1:2} tronquerait les 2 premiers caractères (et non le nombre indiqué par le 2e paramètre). #Noter bien que echo ${1:2} tronquerait les 2 premiers caractères (et non le nombre indiqué par le 2e paramètre).
 </​code>​ </​code>​
-puis  +puis : 
-<​code>​+<​code ​bash>
 $ ./​truncbegin "Hello world !" 5 $ ./​truncbegin "Hello world !" 5
 world ! world !
Ligne 759: Ligne 779:
 echo -e '​\033[A;​B;​Cm toto \033[0m'​ echo -e '​\033[A;​B;​Cm toto \033[0m'​
 </​code>​ </​code>​
-Dans la commande passée ci-dessus, nous pouvons constater qu’il y a 3 paramètres présentsA, B et C.+Dans la commande passée ci-dessus, nous pouvons constater qu’il y a 3 paramètres présentsA, B et C.\\
 A : correspond à un effet affecté au texte affiché A : correspond à un effet affecté au texte affiché
 B : correspond à la couleur du texte B : correspond à la couleur du texte
Ligne 768: Ligne 788:
 === Présentation des différentes valeurs Effet === === Présentation des différentes valeurs Effet ===
  
-Nous allons commencer par les différents effets ​possible ​:+Nous allons commencer par les différents effets ​possibles ​:
  
 ^Code^Effet^ ^Code^Effet^
Ligne 791: Ligne 811:
 === Présentation des différentes valeurs des couleurs === === Présentation des différentes valeurs des couleurs ===
  
-Maintenant que nous avons présenté les différents effets possibles d’attribuer à du texte, nous allons nous attaquer aux couleurs. Chaque couleur ​à 2 valeurs,la première utilisée pour la couleur du texte, et la seconde pour la couleur du fond.+Maintenant que nous avons présenté les différents effets possibles d’attribuer à du texte, nous allons nous attaquer aux couleurs.\\ 
 +Chaque couleur ​2 valeurs, la première utilisée pour la couleur du texte, et la seconde pour la couleur du fond.
 ^Couleur^Couleur texte^Couleur fond^ ^Couleur^Couleur texte^Couleur fond^
 |Noir|30|40| |Noir|30|40|
Ligne 805: Ligne 826:
  
 <code bash> <code bash>
-echo -e '​\033[1;​30;​47m ​toto \033[0;32m est sur \033[1;33m un bateau \033[0m'​+echo -e '​\033[1;​30;​47m ​titi \033[0;32m est sur \033[1;33m un bateau \033[0m'​
 </​code>​ </​code>​
  
 ===== Exemples et exercices ===== ===== Exemples et exercices =====
  
-Comme indiqué dans la [[script_shell#​liens|section liens]] de cette page, de très bon exemples et exercices illustrent le cours disponible sur cette page :\\  +Comme indiqué dans la [[script_shell#​liens|section liens]] de cette page, de très bon exemples et exercices illustrent le cours disponible sur cette page : 
-[[http://​abs.traduc.org/​abs-5.3-fr/​apm.html|Guide avancé d'​écriture des scripts Bash - Une exploration en profondeur de l'art de la programmation shell]]+[[https://​abs.traduc.org/​abs-5.3-fr/​apm.html|Guide avancé d'​écriture des scripts Bash - Une exploration en profondeur de l'art de la programmation shell]]
  
-Aux structures décrites ci-dessus, il est nécessaire,​ pour réaliser des scripts poussés, de connaître les commandes shell les plus usitées.\\ Vous en trouverez une présentation sur cette autre page du wiki : [[projets:​ecole:​scripting:​initiation_au_shell]]+Aux structures décrites ci-dessus, il est nécessaire,​ pour réaliser des scripts poussés, de connaître les commandes shell les plus usitées.\\ Vous en trouverez une présentation sur cette autre page du wiki : [[projets:​ecole:​scripting:​initiation_au_shell]] ​.
  
-La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**.\\  +La programmation de script shell étant ouverte à tous, cela permet de bénéficier de nombreux scripts pour des applications très variées ; cependant, **la plupart sont proposés sans aucune garantie**. 
-Vous pourrez trouver une liste de scripts pouvant servir d'exemple ​sur la page [[:​scripts_utiles|scripts utiles]] du wiki.+Vous pourrez trouver une liste de scripts pouvant servir d'exemples ​sur la page [[:​scripts_utiles|scripts utiles]] du wiki.
  
-Une fois vos armes faites, proposez vos contributions sur le topic du forum [[http://​forum.ubuntu-fr.org/​viewtopic.php?​id=204074|[VOS SCRIPTS UTILES]]] et rajoutez un lien dans la page du wiki ci-dessus.+Une fois vos armes faites, proposez vos contributions sur le topic du forum [[https://​forum.ubuntu-fr.org/​viewtopic.php?​id=204074|[VOS SCRIPTS UTILES]]] et rajoutez un lien dans la page du wiki ci-dessus.
  
 ===== L'art d'​écrire un script ===== ===== L'art d'​écrire un script =====
Ligne 828: Ligne 849:
   * Commencer par : <code bash>#​!/​bin/​bash   * Commencer par : <code bash>#​!/​bin/​bash
 # Version du script</​code>​ # Version du script</​code>​
-  * Créer des fonctions pour des actions précises : +  * Créer des fonctions pour des actions précises :<code bash>​nom_de_la_fonction()
-<code bash> +
-nom_de_la_fonction()+
 { {
 ... ...
  
-} +}</​code>​
-</​code>​+
   * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash>​$CHEMIN_DU_DOSSIER/​$NOM_DU_FICHIER</​code>​   * Utiliser des chemins absolus pour les dossiers et des chemins relatifs pour les noms de fichiers : <code bash>​$CHEMIN_DU_DOSSIER/​$NOM_DU_FICHIER</​code>​
   * Utiliser les entrées de commandes pour les fonctions :<code bash>​nom_de_la_fonction $1 $2 $3 ....</​code>​   * Utiliser les entrées de commandes pour les fonctions :<code bash>​nom_de_la_fonction $1 $2 $3 ....</​code>​
Ligne 854: Ligne 872:
         exit 100         exit 100
     fi     fi
-}</​code>​ainsi après chaque commande vous pouvez donner des codes d'​exécutions différents.+}</​code>​ ainsi après chaque commande vous pouvez donner des codes d'​exécutions différents.
  
 <note tip>​Astuce : le plus important dans tout programme est l'​algorithme utilisé.</​note>​ <note tip>​Astuce : le plus important dans tout programme est l'​algorithme utilisé.</​note>​
 Exemple : Exemple :
 supposons que vous ayez une base de données, avec 3 catégories d'​enregistrements possibles : supposons que vous ayez une base de données, avec 3 catégories d'​enregistrements possibles :
-éléphant ​bleu, éléphant ​blanc, ​éléphant ​rose ayant chacun 30 individus.+canard ​bleu, canard ​blanc, ​canard ​rose ayant chacun 30 individus.
 Votre script doit compter le nombre d'​éléphants bleus et blancs. Votre script doit compter le nombre d'​éléphants bleus et blancs.
 Deux possibilités s'​offrent à vous : Deux possibilités s'​offrent à vous :
-  * calculer le nombre ​d'​éléphants bleus éléphants blancs+  * calculer le nombre ​de canard verts canard violets
 ou ou
-  * calculer le nombre total d'​éléphants ​- nombre ​d'​éléphants ​roses+  * calculer le nombre total de canard ​- nombre ​de canard ​roses
  
 Quel algorithme choisissez-vous ? Quel algorithme choisissez-vous ?
  
-Résultat : le premier car dans le deuxième il faut d'​abord calculer le nombre total d'​éléphants,​ donc un calcul en plus :-P .+Résultat : le premier car dans le deuxième il faut d'​abord calculer le nombre total de canard.
  
-===== Liens =====+<​!DOCTYPE html> 
 +<html lang="​en">​
  
-  * (frhttp://marcg.developpez.com/​ksh/ ​Pour ceux qui souhaitent aller plus loin dans la conception de script shell+<​head>​ 
-  ​* ​(fr) [[http://abs.traduc.org/abs-fr/|Guide avancé d'écriture des scripts Bash]] : Un très bon tutoriel concernant la réalisation du script shellC'est l'un des plus complets et les mieux détaillés disponibles en françaisIl contient également ​[[http://abs.traduc.org/abs-5.3-fr/apa.html|des exemples ​de script ​complets]], une [[http://abs.traduc.org/abs-5.3-fr/apb.html|carte de référence]] (variables, tests...). Ce site est un site qui vaut réellement le détour pour tous ceux qui cherchent à créer des scripts complets en utilisant au mieux les performances du shell+    <​title>​Morocco BLS Spain Visa: Welcome to the Official Website Spain Visa Application Centre in Morocco</​title>​ 
-  ​* ​(fr) https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux Un tutoriel très complet pour linux qui comporte quelques parties sur la réalisation de scripts bash+ 
-  * (en) [[http://www.ibm.com/developerworks/library/l-bash-parameters.html|Bash parameters ​and parameter expansions]]En anglais mais contient de nombreux exemples concernant la gestion et l'analyse des paramètres+    <!-- Meta Tags --> 
-  ​* ​(fr [[ftp://ftp-developpez.com/eric-sanchis/IntroProgBash.pdf|Introduction à Bash]] +    <meta charset="​utf-8">​ 
-  ​* ​(fr [[http://www.scotchlinux.tuxfamily.org/]] exemples de scripts bash, quelques trucs utiles ( fonctions, fonctions comme paramètres...  +    <meta name="​viewport"​ content="​width=device-width,​ initial-scale=1,​ shrink-to-fit=no">​ 
-  ​* ​(en[[https://www.shellcheck.net/]] Permet ​de corriger ​la syntaxe du script (parenthèse oubliéegraphie incorrecte d'une commandeun "if" ​sans son "fi", ​un "while sans son "do" ​ou son "done", etc...). +    <meta name="​description"​ content="​Morocco BLS Spain Visa">​ 
----- + 
-//Contributeurs[[:utilisateurs:Gapz]][[:utilisateurs:Gloubiboulga]] ​,[[:utilisateurs:sparky]] et [[:utilisateurs:deax_one]]//+    <​script>​ 
 + 
 +        const storedTheme = localStorage.getItem('​theme'​) 
 + 
 +        const getPreferredTheme = () => { 
 +            if (storedTheme) { 
 +                return storedTheme 
 +            } 
 +            return window.matchMedia('​(prefers-color-schemedark)'​).matches ? '​dark'​ : '​light'​ 
 +        } 
 + 
 +        const setTheme = function (theme) { 
 +            if (theme === '​auto'​ && window.matchMedia('​(prefers-color-schemedark)'​).matches) { 
 +                ​document.documentElement.setAttribute('​data-bs-theme',​ '​dark'​) 
 +            } else { 
 +                document.documentElement.setAttribute('​data-bs-theme',​ theme) 
 +            } 
 +        } 
 + 
 +        setTheme(getPreferredTheme()) 
 + 
 +        window.addEventListener('​DOMContentLoaded',​ () => { 
 +            var el = document.querySelector('​.theme-icon-active'​);​ 
 +            if (el != '​undefined'​ && el != null) { 
 +                const showActiveTheme = theme => { 
 +                    const activeThemeIcon = document.querySelector('​.theme-icon-active use'​) 
 +                    const btnToActive = document.querySelector(`[data-bs-theme-value="​${theme}"​]`) 
 +                    const svgOfActiveBtn = btnToActive.querySelector('​.mode-switch use').getAttribute('​href'​) 
 + 
 +                    document.querySelectorAll('​[data-bs-theme-value]'​).forEach(element => { 
 +                        element.classList.remove('​active'​) 
 +                    }) 
 + 
 +                    btnToActive.classList.add('​active'​) 
 +                    activeThemeIcon.setAttribute('​href',​ svgOfActiveBtn) 
 +                } 
 + 
 +                window.matchMedia('​(prefers-color-schemedark)'​).addEventListener('change', () => { 
 +                    if (storedTheme !== '​light'​ || storedTheme !== '​dark'​) { 
 +                        setTheme(getPreferredTheme()) 
 +                    } 
 +                }) 
 + 
 +                showActiveTheme(getPreferredTheme()) 
 + 
 +                document.querySelectorAll('​[data-bs-theme-value]'​) 
 +                    .forEach(toggle => { 
 +                        toggle.addEventListener('​click',​ () => { 
 +                            const theme = toggle.getAttribute('​data-bs-theme-value'​) 
 +                            localStorage.setItem('​theme',​ theme) 
 +                            setTheme(theme) 
 +                            showActiveTheme(theme) 
 +                        }) 
 +                    }) 
 + 
 +            } 
 +        }) 
 + 
 +    </​script>​ 
 + 
 +    <!-- Favicon --> 
 +    <link rel="​shortcut icon" href="/​assets/​images/​favicon.png">​ 
 + 
 +    <!-- Google Font --> 
 +    <link rel="​preconnect"​ href="​https://fonts.googleapis.com">​ 
 +    <link rel="​preconnect"​ href="​https:​//​fonts.gstatic.com"​ crossorigin>​ 
 +    <link rel="​stylesheet"​ href="​https://​fonts.googleapis.com/​css2?​family=DM+Sans:​wght@400;​500;​700&​family=Poppins:​wght@400;​500;​700&​display=swap">​ 
 + 
 +    <!-- Plugins CSS --> 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​font-awesome/​css/​all.min.css?​v=AbA177XfpSnFEvgpYu1jMygiLabzPCJCRIBtR5jGc0k">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​bootstrap-icons/bootstrap-icons.css?​v=4RctOgogjPAdwGbwq-rxfwAmSpZhWaafcZR9btzUk18">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​tiny-slider/​tiny-slider.css?​v=1CXVlacnwYLmg9X2AhCKvYcSgR53GWiU3z4qZJDrb68">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​glightbox/​css/​glightbox.css?​v=yMoCTayb6wccTz561YN_R0qkP756JifYXnA40MUtR-k">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​flatpickr/​css/​flatpickr.min.css?​v=RXPAyxHVyMLxb0TYCM2OW5R4GWkcDe02jdYgyZp41OU">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​choices/​css/​choices.min.css?​v=IhTRSpOAAOl37YqrDOlNjxD6S4lzZ_n2WqKtc03i0mE">​ 
 + 
 +    <!-- Theme CSS --> 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​bootstrap/​dist/​css/​bootstrap.min.css?​v=YLGeXaapI0_5IgZopewRJcFXomhRMlYYjugPLSyNjTY">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​css/​style.css?​v=de-9WIa9z8cZXAVKAywSh1vOyouay5jH6hy6oE4R0xc">​ 
 + 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​css/​color.css?​v=biNDUrJj74VlRbGB7tvoVV8aOPeiVsRt7L_VDdhggXQ"​ /> 
 + 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​css/​site.css?​v=ekmtryaKttePPamW3CxEz99-N5ruMwA9JAkOw57RgzI"​ /> 
 + 
 +     
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​kendo/​css/​kendo.common.min.css">​ 
 +    <link rel="​stylesheet"​ type="​text/​css"​ href="/​assets/​vendor/​kendo/​css/​kendo.silver.min.css">​ 
 + 
 +    <​style>​ 
 +    </​style>​ 
 +    <script ​src="/​assets/​vendor/​jquery/dist/jquery.min.js"><​/script>​ 
 +    <script src="/​assets/​vendor/​jquery-validation/​dist/​jquery.validate.min.js"></​script>​ 
 +    <script src="/​assets/​vendor/​jquery-ajax-unobtrusive/jquery-ajax-unobtrusive.js"></​script>​ 
 +    <script src="/​assets/​vendor/​jquery-validation-unobtrusive/​jquery.validate.unobtrusive.min.js"></​script>​ 
 +    <script type="​text/​javascript"​ src="​https://​5f2749aa43d4.eu-central-1.sdk.awswaf.com/​5f2749aa43d4/​4bc7b7b893fe/​challenge.js" ​ defer></​script>​ 
 +    <​script>​ 
 +        $.ajaxSetup({ 
 +            beforeSend: function (xhr, options
 +                if (options.type.toUpperCase() == "​POST"​) { 
 +                    ​xhr.setRequestHeader("​RequestVerificationToken",​ $('​input:​hidden[name="​__RequestVerificationToken"​]'​).val()); 
 +                } 
 + 
 +            } 
 +        }); 
 +    </​script>​ 
 +</​head>​ 
 +<​body>​ 
 +    <div class="​preloader">​ 
 +        <div class="​preloader-item">​ 
 +            <div class="​spinner-grow text-primary"></​div>​ 
 +        </​div>​ 
 +    </​div>​ 
 +    <div id="​global-overlay"​ class="​global-overlay">​ 
 +        <div class="​global-overlay-loader">​ 
 +        </​div>​ 
 +    </​div>​ 
 +    <header class="​navbar-light header-sticky">​ 
 +        <!-- Nav START --> 
 +        <nav class="​navbar navbar-expand-xl z-index-9 navbar-divider">​ 
 +            <div class="​container">​ 
 +                <!-- Logo START --> 
 +                <a class="​navbar-brand"​ href="/​MAR/​home/​index">​ 
 +                    <img class="​light-mode-item navbar-brand-item"​ src="/​assets/​images/​logo.png"​ alt="​BLS Logo" title="​BLS Logo">​ 
 +                    <img class="​dark-mode-item navbar-brand-item"​ src="/​assets/​images/​logo.png"​ alt="​logo">​ 
 +                </​a>​ 
 +                <!-- Logo END --> 
 +                <!-- Responsive navbar toggler --> 
 +                <button class="​navbar-toggler ms-auto"​ type="​button"​ data-bs-toggle="​collapse"​ data-bs-target="#​navbarCollapse"​ aria-controls="​navbarCollapse"​ aria-expanded="​false"​ aria-label="​Toggle navigation">​ 
 +                    <i class="​bi bi-search fs-4">​ </​i>​ 
 +                </​button>​ 
 + 
 +                <!-- Responsive navbar toggler --> 
 +                <button class="​navbar-toggler"​ type="​button"​ data-bs-toggle="​collapse"​ data-bs-target="#​navbarCollapse2"​ aria-controls="​navbarCollapse2"​ aria-expanded="​false"​ aria-label="​Toggle navigation">​ 
 +                    <span class="​navbar-toggler-animation">​ 
 +                        <​span></​span>​ 
 +                        <​span></​span>​ 
 +                        <​span></​span>​ 
 +                    </​span>​ 
 +                </​button>​ 
 + 
 +                <!-- Main navbar START --> 
 +                <div class="​navbar-collapse collapse"​ id="​navbarCollapse">​ 
 +                    <div class="​col-md-9">​ 
 +                        <div class="​nav my-3 my-xl-0 px-4 flex-nowrap align-items-center">​ 
 +                            <div class="​nav-item w-100">​ 
 +                                <div class="​align-items-center position-relative">​ 
 +                                    <div class="​align-items-center text-primary"​ style="​font-size:​30px;​font-weight:​700;">​Apply for VISA to Spain In Morocco</​div>​ 
 +                                </​div>​ 
 +                            </​div>​ 
 +                        </​div>​ 
 +                    </​div>​ 
 +                    <div class="​col-md-3">​ 
 +                        <div class="​align-items-center position-relative">​ 
 +                            <small class="​text-secondary mb-1">​Follow us on</​small>​ 
 +                            <ul class="​list-inline mb-3 mt-0">​ 
 +                                <li class="​list-inline-item">​ <a class="​btn btn-sm px-2 bg-facebook mb-0" href="https://www.facebook.com/blsinternationalservices/" target="​_blank"><​i class="​fab fa-fw fa-facebook-f"></​i></​a> </​li>​ 
 +                                <li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-instagram mb-0" href="​https://www.instagram.com/​blsinternationalservicesltd/"​ target="​_blank"><​i class="​fab fa-fw fa-instagram"></​i></​a>​ </li> 
 +                                <​li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-twitter mb-0" href="​https://​twitter.com/​blsintlservices"​ target="​_blank"><​i class="​fab fa-fw fa-twitter"></​i></​a>​ </​li>​ 
 +                                <li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-linkedin mb-0" href="​https://www.linkedin.com/company/bls-international-services-ltd/?​originalSubdomain=in"​ target="​_blank"><​i class="​fab fa-fw fa-linkedin-in"></​i></​a>​ </​li>​ 
 +                            </​ul>​ 
 +                        </​div>​ 
 +                    </​div>​ 
 +                </​div>​ 
 + 
 +                <!-- Main navbar END --> 
 +                <!-- Profile ​and notification START --> 
 +                <ul class="​nav flex-row align-items-center list-unstyled ms-xl-auto">​ 
 +                    <li class="​dropdown nav-item">​ 
 +                        <a class="​nav-link small pb-2" href="#"​ role="​button"​ id="​languageDropdown"​ data-bs-toggle="​dropdown"​ aria-haspopup="​true"​ aria-expanded="​false">​ 
 +                            <img class="​w-30px me-2" src="/​assets/​images/​flags/​en-US.svg" alt=""><​small>​English</​small>​ 
 +                        </​a>​ 
 +                        <ul class="​dropdown-menu dropdown-animation dropdown-menu-end min-w-auto"​ aria-labelledby="​languageDropdown">​ 
 +                            <li> <a class="​dropdown-item me-4" href="​javascript:​OnLanguageChange('en-US'​);"><​img class="​fa-fw me-2" src="/​assets/​images/​flags/​en-US.svg" alt="">​English</​a>​ </li> 
 +                            <​li>​ <a class="​dropdown-item me-4" href="​javascript:​OnLanguageChange('​es-ES'​);"><​img class="​fa-fw me-2" src="/​assets/​images/​flags/​es-ES.svg"​ alt="">​Español</​a>​ </​li>​ 
 +                            <li> <a class="​dropdown-item me-4" href="​javascript:OnLanguageChange('​fr-FR'​);"><​img class="​fa-fw me-2" src="/assets/images/​flags/​fr-FR.svg" alt="">​Français<​/a> </​li>​ 
 +                        </​ul>​ 
 +                    </​li>​ 
 +                        <li class="​nav-item ms-3 dropdown">​ 
 +                            <!-- Avatar --> 
 +                            <a class="​avatar avatar-sm p-0 mt-0" href="#"​ id="​profileDropdown"​ role="​button"​ data-bs-auto-close="​outside"​ data-bs-display="​static"​ data-bs-toggle="​dropdown"​ aria-expanded="​false">​ 
 +                                    <img onerror="​OnPhotoError(this);"​ class="​avatar-img rounded-2"​ src="/assets/​images/​avatar/​01.jpg" alt="​Profile">​ 
 +                            </​a>​ 
 + 
 +                            <!-- Profile dropdown START --> 
 +                            <ul class="​dropdown-menu dropdown-animation dropdown-menu-end shadow pt-3" aria-labelledby="​profileDropdown">​ 
 +                                <!-- Profile info --> 
 +                                <li class="​px-3 mb-3">​ 
 +                                    <div class="​d-flex align-items-center">​ 
 +                                        <!-- Avatar --> 
 +                                        <div class="​avatar me-3">​ 
 +                                                <img onerror="​OnPhotoError(this);" class="​avatar-img rounded-circle shadow"​ src="/​assets/​images/​avatar/​01.jpg"​ alt="​Profile">​ 
 + 
 +                                        </​div>​ 
 +                                        <​div>​ 
 +                                            <a class="​h6 mt-2 mt-sm-0"​ href="#">​AIT EL ABED SADIA</​a>​ 
 +                                            <p class="​small m-0">​ABEDSAADIYA4@GMAIL.COM</​p>​ 
 +                                        </​div>​ 
 +                                    </​div>​ 
 +                                </​li>​ 
 + 
 +                                <!-- Links --> 
 +                                <li> <hr class="​dropdown-divider"></​li>​ 
 +                                <​li></​li>​ 
 +                                <​li><​a class="​dropdown-item"​ href="/​MAR/​account/​DeleteUser"><​i class="​fa fa-trash fa-fw me-2"></​i>​Delete Account</​a></​li>​ 
 +                                <​li><​a class="​dropdown-item"​ href="/​MAR/​account/​ChangePassword?​userId=0925dc09-6838-48a4-8fa3-029eccd24552"><​i class="​fa fa-key fa-fw me-2"></​i>​Change Password</​a></​li>​ 
 +                                <​li><​a class="​dropdown-item bg-danger-soft-hover"​ href="​javascript:​OnLogout();"><​i class="​fa fa-power-off me-2"></​i>​Logout</​a></​li>​ 
 +                                <li> <hr class="​dropdown-divider"></​li>​ 
 + 
 +                                <!-- Dark mode options START --> 
 +                                <!-- Dark mode options END--> 
 +                            </​ul>​ 
 +                            <!-- Profile dropdown END --> 
 +                        </​li>​ 
 +                    <!-- Profile dropdown START --> 
 +                    <!-- Profile dropdown END --> 
 +                </​ul>​ 
 +                <!-- Profile and notification END --> 
 +            </​div>​ 
 +        </​nav>​ 
 +        <!-- Nav END --> 
 +        <!--Main menu link START --> 
 +        <nav class="​navbar navbar-expand-xl navbar-divider">​ 
 +            <div class="​container px-0">​ 
 +                <!-- Main navbar START --> 
 +                <div class="​navbar-collapse w-100 collapse"​ id="​navbarCollapse2">​ 
 +                    <ul class="​navbar-nav nav-active-line navbar-nav-scroll mx-auto">​ 
 +                        <li class="​nav-item">​ <a class="​nav-link home-active"​ href="/​MAR/​home/​index"><​i class="​fa fa-home"></​i></​a>​ </​li>​ 
 +                        <li class="​nav-item dropdown">​ 
 +                            <a class="​nav-link dropdown-toggle visa-active"​ href="#"​ id="​pageMenu"​ data-bs-toggle="​dropdown"​ aria-haspopup="​true"​ aria-expanded="​false">​Visa Type</​a>​ 
 +                            <ul class="​dropdown-menu"​ aria-labelledby="​pageMenu">​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​schengenvisa">​ 
 +                                        <i class="​text-warning fa fa-globe me-2"></​i>​Schengen Visa 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="​https://www.exteriores.gob.es/es/​ServiciosAlCiudadano/​Paginas/​Servicios-consulares.aspx" target="​_blank">​ 
 +                                        <i class="​text-info fa fa-globe me-2"></​i>​National Visa 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                            </​ul>​ 
 +                        </​li>​ 
 + 
 +                        <!-- Nav item --> 
 +                        <li class="​nav-item">​ <a class="​nav-link new-app-active"​ href="/​MAR/​bls/​vtv">​Book New Appointment</​a>​ </​li>​ 
 + 
 +                        <!-- Nav item --> 
 + 
 +                        <li class="​nav-item dropdown">​ 
 +                            <a class="​nav-link dropdown-toggle my-app-active"​ href="#"​ id="​pageMenu"​ data-bs-toggle="​dropdown"​ aria-haspopup="​true"​ aria-expanded="​false">​Manage Appointments</​a>​ 
 +                            <ul class="​dropdown-menu"​ aria-labelledby="​pageMenu">​ 
 + 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​blsappointment/​BLSCancelAppointment">​ 
 +                                        <i class="​text-danger fa-regular fa-calendar-xmark me-2"></​i>​Cancel Appointment 
 +                                    </​a>​ 
 +                                </​li>​ 
 + 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​blsappointment/​BLSReprintAppointmentLetter">​ 
 +                                        <i class="​text-info fa-solid fa-print me-2"></​i>​Re-Print Appointment Letter 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​blsappointment/​ManageApplicant">​ 
 +                                        <i class="​text-info fa-solid fa-users me-2"></​i>​Manage Applicants 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                            </​ul>​ 
 +                        </​li>​ 
 +                        <li class="​nav-item">​ <a class="​nav-link contact-active"​ href="/​MAR/​bls/​VisaApplicationStatus">​Application Status</​a>​ </​li>​ 
 + 
 +                        <li class="​nav-item dropdown">​ 
 +                            <a class="​nav-link dropdown-toggle gen-info-active"​ href="#"​ id="​pageMenu"​ data-bs-toggle="​dropdown"​ aria-haspopup="​true"​ aria-expanded="​false">​General Info</​a>​ 
 +                            <ul class="​dropdown-menu"​ aria-labelledby="​pageMenu">​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​customerexperience">​ 
 +                                        <i class="​text-warning fa fa-face-smile me-2"></​i>​Customer Experience 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​additionalservices">​ 
 +                                        <i class="​text-danger fa fa-user-plus me-2"></​i>​Additional Services 
 +                                    </​a>​ 
 +                                </​li>​ 
 + 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​publicholidaysclosures">​ 
 +                                        <i class="​text-info fa fa-umbrella-beach me-2"></​i>​Public Holidays 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <li> <hr class="​dropdown-divider"></​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​usefullinks">​ 
 +                                        <i class="​text-success fa fa-link me-2"></​i>​Useful Links 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​securityrules">​ 
 +                                        <i class="​text-orange fa fa-lock me-2"></​i>​Security Rules 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​faq">​ 
 +                                        <i class="​text-orange fa fa-lock me-2"></​i>​FAQs 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                                <​li>​ 
 +                                    <a class="​dropdown-item"​ href="/​MAR/​bls/​contactus">​ 
 +                                        <i class="​text-orange fa fa-contact-card me-2"></​i>​Contact Us 
 +                                    </​a>​ 
 +                                </​li>​ 
 +                            </​ul>​ 
 +                        </​li>​ 
 + 
 +                        <li class="​nav-item">​ <a class="​nav-link doorstep-active"​ href="/​MAR/​bls/​doorstepservice">​Doorstep Service</​a>​ </​li>​ 
 + 
 +                    </​ul>​ 
 + 
 +                </​div>​ 
 +                <!-- Main navbar END --> 
 +            </​div>​ 
 +        </​nav>​ 
 +        <!--Main menu link END --> 
 +    </​header>​ 
 +    <!-- **************** MAIN CONTENT START **************** --> 
 +    <​main>​ 
 +         
 + 
 +<​style>​ 
 +    ​.form-check-input { 
 +        margin-top: 0.2em !important; 
 +        ​margin-left:​ 0px !important;​ 
 +        margin-right:​ 5px !important;​ 
 +    } 
 +</​style>​ 
 + 
 +<main id="​div-main">​ 
 +    <div class="​container h-100 p-md-3 p-sm-2">​ 
 +        <div class="​row">​ 
 +            <div class="​col-md-5">​ 
 +            </​div>​ 
 +            <div class="​bg-mode shadow rounded-3 overflow-hidden p-3 col-md-3">​ 
 +                <div class="​text-center col-12">​ 
 +                    <a href="​index.html">​ 
 +                        <img class="​h-50px mb-2" src="/​assets/​images/​logo.png"​ alt="​logo">​ 
 +                    </​a>​ 
 +                </​div>​ 
 +                <h5 class="​pt-3 text-center"​ style="​width:​100%;">​Book New Appointment</​h5>​ 
 +                <form class="​mt-4 text-start"​ method="​post"​ data-ajax-begin="​onAjaxBegin"​ data-ajax-success="​onAjaxSuccess"​ data-ajax="​true"​ data-ajax-method="​POST"​ action="/​MAR/​bls/​vtv">​ 
 +                    <div class="​validation-summary text-danger mb-3 validation-summary-valid"​ data-valmsg-summary="​true"><​ul><​li style="​display:​none"></​li>​ 
 +</​ul></​div>​ 
 +                    <input id="​CaptchaData"​ name="​CaptchaData"​ type="​hidden"​ value=""​ /> 
 +                    <!-- Button --> 
 +                    <div class="​pt-5 pb-3 text-center">​ 
 +                        <button class="​btn btn-primary-soft"​ id="​btnVerify"​ type="​button"​ onclick="​VerifyCaptcha();">​Verify Selection</​button>​ 
 +                        <button type="​button"​ id="​btnVerified"​ formnovalidate="​formnovalidate"​ style="​display:none;" class="​btn btn-success text-center"​ disabled><​i class="​fa fa-badge-check pr-2"><​/i>​Verified<​/button>​ 
 +                        <button class="​btn btn-primary"​ style="​display:​none;"​ id="​btnSubmit"​ type="​submit">​Submit</​button>​ 
 +                    </​div>​ 
 +                <input name="​__RequestVerificationToken"​ type="​hidden"​ value="​CfDJ8Ca35kE8XjpDjtrp1eZXg8RzzJIMlJbMzgi5D_ZdoOzOrlHiGDh8euc5Dr2lZGtoMlLj26q3v4diUUDht-gpajaA0cd9AkADjdx4shuy7FqmJkBj2fHgZQQv4UsCRM1Ww_kTnAErRVEOhHkfKpKtUAbk4Kj6UHUcjnbDrgXZa4Z5llsc-WhE8tuGCFb6Gqrz2A"​ /></​form>​ 
 +            </​div>​ 
 +            <div class="​col-md-4">​ 
 +            </​div>​ 
 +        </​div>​ 
 +    </​div>​ 
 +</​main>​ 
 + 
 +<div class="​modal fade" style="​z-index:​99999;"​ data-bs-backdrop="​static"​ data-bs-keyboard="​false"​ id="​alertModal"​ tabindex="​-1"​ role="​dialog"​ aria-labelledby="​alertModalLabel"​ 
 +     ​aria-hidden="​true">​ 
 +    <div class="​modal-dialog modal-dialog-centered"​ role="​document">​ 
 +        <div class="​modal-content">​ 
 +            <div class="​modal-header">​ 
 +                <h6 class="​modal-title">​Disclaimer<​span style="​font-weight:​600;​color:​black"></​span></​h6>​ 
 + 
 +            </​div>​ 
 +            <div class="​modal-body scam-body"​ style="​font-weight:​500">​ 
 +                I grant permission and give my consent to BLS International for capturing of electronic images for Liveness detection purposeThis is a requirement in order to complete online appointment request. 
 +            </div> 
 +            <div class="​modal-footer text-center">​ 
 +                <button class="​btn btn-success btn-block"​ type="​button"​ data-bs-dismiss="​modal"​ onclick="​onBioDisclaimerAccept();">​I agree to provide my consent</​button>​ 
 +                <button class="​btn btn-danger btn-block"​ type="​button"​ onclick="​onReject();">​I disagree and don&#​x27;​t give my consent</​button>​ 
 +            </​div>​ 
 + 
 +        </​div>​ 
 +    </​div>​ 
 +</​div>​ 
 +<div class="​modal fade" style="​z-index:​99999;"​ data-bs-backdrop="​static"​ data-bs-keyboard="​false"​ id="​dpModal"​ tabindex="​-1"​ role="​dialog"​ aria-labelledby="​dpModalLabel"​ 
 +     ​aria-hidden="​true">​ 
 +    <div class="​modal-dialog modal-xl modal-dialog-centered"​ role="​document">​ 
 +        <div class="​modal-content">​ 
 +            <div class="​modal-header">​ 
 +                <h6 class="​modal-title">​Data Protection Information<​span style="​font-weight:​600;​color:​black"></​span></​h6>​ 
 + 
 +            </​div>​ 
 +            <div class="​modal-body scam-body"​ style="​font-weight:​400">​ 
 +                <p align="​center"​ style="​text-align:​center;"><​strong><​span>​Data protection information</​span></​strong></​p>​ 
 +<​p><​strong><​span>&​nbsp;</​span></​strong></​p>​ 
 +<​p><​strong><​span>​Responsible for&​nbsp;​data processing</​span></​strong></​p>​ 
 +<​p><​span>​Ministry of Foreign Affairs, European Union and Cooperation</​span></​p>​ 
 +<​p><​span lang="​EN-GB">​Postal address: </​span><​span>​Data Protection Section</​span><​span lang="​EN-GB">,​ Plaza de la Provincia, 1, 28012 Madrid, Spain.</​span></​p>​ 
 +<​p><​span>​Email:​ </​span><​span lang="​ES"><​a href="​mailto:​dpd@maec.es"><​span lang="​EN-US">​dpd@maec.es</​span></​a></​span></​p>​ 
 +<​p><​span>&​nbsp;</​span></​p>​ 
 +<​p><​strong><​span>​Purpose</​span></​strong></​p>​ 
 +<​p><​span>​Management of the appointment for the delivery of documentation related to the start of visa application procedures.</​span></​p>​ 
 +<​p><​span>&​nbsp;</​span></​p>​ 
 +<​p><​strong><​span>​Legal basis for processing</​span></​strong></​p>​ 
 +<​p><​span>​The data subject gave his or her explicit consent to the processing of such personal data for one or more of the specified purposes, except where Union or Member State law provides that the prohibition referred to in paragraph 1 cannot be lifted by the data subject.</​span></​p>​ 
 +<​p><​span>&​nbsp;</​span></​p>​ 
 +<​p><​strong><​span>​Transfers and/or international transfers of data</​span></​strong></​p>​ 
 +<​p><​span>​No transfers to third parties will be made unless required by court order. </​span></​p>​ 
 +<​p><​span>​No international transfers to third parties will be made.</​span></​p>​ 
 +<​p><​strong><​span>​Exercise of rights</​span></​strong></​p>​ 
 +<​p><​span>​You can exercise your rights of access, rectification,​ deletion and portability of data, as well as the mandatory rights of limitation or opposition to their processing, by sending an email to </​span><​span lang="​ES"><​a href="​mailto:​dpd@maec.es"><​span lang="​EN-US">​dpd@maec.es</​span></​a></​span><​span>,​ in which case we will respond within one month.</​span></​p>​ 
 +<​p><​span>&​nbsp;</​span></​p>​ 
 +<​p><​strong><​span>​Right to complain</​span></​strong></​p>​ 
 +<​p><​span>​You have the right to file a complaint with the Spanish Data Protection Agency in the event that you consider that the exercise of your rights has not been properly addressed.</​span></​p>​ 
 +<​p><​span style="​color:​red;">&​nbsp;</​span></​p>​ 
 +<​p><​span>​For more information on the processing of your data,<a href="/​mar/​bls/​privacypolicy"​ target="​_blank">​Click here</​a></​span></​p>​ 
 +<​p><​span>&​nbsp;</​span></​p>​ 
 +            </​div>​ 
 +            <div class="​modal-footer text-center">​ 
 +                <button class="​btn btn-success btn-block"​ type="​button"​ data-bs-dismiss="​modal"​ onclick="​onDpAccept();">​I have read and understood the information on data protection and I explicitly consent to the data treatment</​button>​ 
 +                <button class="​btn btn-danger btn-block"​ type="​button"​ onclick="​onDpReject();">​I disagree and don&#​x27;​t give my consent</​button>​ 
 +            </​div>​ 
 + 
 +        </​div>​ 
 +    </​div>​ 
 +</​div>​ 
 + 
 +<script
 +    $(document).ready(function () { 
 + 
 + 
 +    }); 
 + 
 +      function onAjaxSuccess(res) { 
 +        if (res.success) { 
 +            window.location.href = res.returnUrl;​ 
 +        } 
 +        else { 
 +            HideLoader();​ 
 +            ShowError(res.error);​ 
 +        } 
 +    } 
 + 
 +    function onReject() { 
 +        window.location.href = "/​MAR/​BlsAppointment/​LivenessRejection";​ 
 +    } 
 +    function onBioDisclaimerAccept() { 
 +    } 
 +    function biometricAccepted() { 
 +        ShowLoader();​ 
 +         ​$.ajax({ 
 +             url: "/​MAR/​BlsAppointment/​biometricaccepted"​, 
 +                success: function(result) { 
 +                    HideLoader();​ 
 +                    $("#​dpModal"​).modal('show'​);​ 
 +             }, 
 +             ​error:​ function (err) { 
 +                 ​HideLoader();​ 
 +             } 
 +            }); 
 + 
 +    } 
 +    function onDpAccept() { 
 +        ShowLoader();​ 
 +        window.location.href = "/​MAR/​BlsAppointment/​DataProtectionEmailSent"
 +    } 
 +    function onDpReject() { 
 +        window.location.href = "/​MAR/​BlsAppointment/​DataProtectionRejection"
 +    } 
 + 
 +    function VerifyCaptcha(eobj) { 
 +        var win = GetMainWindow();​ 
 +        var title = '​Verify Selection';​ 
 +        win.iframeOpenUrl = '/​MAR/​NewCaptcha/​GenerateCaptcha';​ 
 +        win.OpenWindow({ Title:​title,​ Width: 400, Height: 600 }); 
 +        return false; 
 +    } 
 +    function OnVerifyCaptcha(res) { 
 +        if (res.exceeded) { 
 +            window.location.href = window.location.href.split("?")[0]; 
 +            return false; 
 +        } 
 +        else if (res.success) { 
 +            $("#btnVerify").hide(); 
 +            $("#​btnVerified"​).show(); 
 +            $("#​btnSubmit"​).show(); 
 +            $("#​CaptchaData"​).val(res.cd)
 + 
 +        } 
 +    } 
 + 
 + 
 +</​script>​ 
 + 
 + 
 +    </​main>​ 
 +    <!-- **************** MAIN CONTENT END **************** --> 
 +    <!-- ======================= 
 +    Footer START --> 
 +    <footer class="​bg-dark pt-5">​ 
 +        <div class="​container">​ 
 +            <!-- Row START --> 
 +            <div class="​row g-4">​ 
 + 
 +                <!-- Widget 1 START --> 
 +                <div class="​col-lg-3">​ 
 +                    <!-- logo --> 
 +                    <a href="​index.html">​ 
 +                        <​img class="​h-40px"​ src="/​assets/​images/​logo.png"​ alt="​logo">​ 
 +                    </​a>​ 
 +                    <h4 class="​my-3 text-primary">​BLS International</​h4>​ 
 +                </​div>​ 
 +                <!-- Widget 1 END --> 
 +                <​!-- Widget 2 START --> 
 +                <div class="​col-lg-8 ms-auto">​ 
 +                    <div class="​row g-4">​ 
 +                        <!-- Link block --> 
 +                        <div class="​col-6 col-md-4">​ 
 +                            <h5 class="​text-white mb-2 mb-md-4">​Page<​/h5> 
 +                            <ul class="​nav flex-column text-primary-hover">​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/MAR/​bls/​aboutus">​About us</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​contactus">​Contact Us</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​customerexperience">​Customer Experience</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​additionalservices">​Additional Services</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​PublicHolidaysClosures">​Public Holidays</​a></​li>​ 
 +                            </​ul>​ 
 +                        </​div>​ 
 + 
 +                        <!-- Link block --> 
 +                        <div class="​col-6 col-md-4">​ 
 +                            <h5 class="​text-white mb-2 mb-md-4">​Link</​h5>​ 
 +                            <ul class="​nav flex-column text-primary-hover">​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​account/​registeruser"></​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​account/​login">​Sign up</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​faq">​FAQs</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​usefullinks">​Useful Links</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​securityrules">​Security Rules</​a></​li>​ 
 +                            </​ul>​ 
 +                        </​div>​ 
 + 
 +                        <!-- Link block --> 
 + 
 +                        <!-- Link block --> 
 +                        <div class="​col-6 col-md-4">​ 
 +                            <h5 class="​text-white mb-2 mb-md-4">​Booking</​h5>​ 
 +                            <ul class="​nav flex-column text-primary-hover">​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​blsappointment/​manageappointment">​Book Appointment</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​blsappointment/​myappointments">​My Appointment</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​visatype">​Visa Type</​a></​li>​ 
 +                                <li class="​nav-item"><​a class="​nav-link text-muted"​ href="/​MAR/​bls/​doorstepservice">​Doorstep Service</​a></​li>​ 
 +                            </​ul>​ 
 +                        </​div>​ 
 +                    </​div>​ 
 +                </​div>​ 
 +                <!-- Widget 2 END --> 
 + 
 +            </​div><​!-- Row END --> 
 + 
 +            <div class="​row g-4 justify-content-between mt-0 mt-md-2">​ 
 + 
 +                <!-- Payment card --> 
 +                <div class="​col-sm-7 col-md-6 col-lg-4">​ 
 +                    <small style="​position:relative;​top:60px;">​V&​nbsp;​4.4</​small>​ 
 +                </​div>​ 
 + 
 +                <!-- Social media icon --> 
 +                <div class="​col-sm-5 col-md-6 col-lg-3 text-sm-end">​ 
 +                    <h5 class="​text-white mb-2">​Follow us on</​h5>​ 
 +                    <ul class="​list-inline mb-0 mt-3">​ 
 +                        <li class="​list-inline-item">​ <a class="​btn btn-sm px-2 bg-facebook mb-0" href="​https://​www.facebook.com/​blsinternationalservices/"​ target="​_blank"><​i class="​fab fa-fw fa-facebook-f"></​i></​a>​ </​li>​ 
 +                        <li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-instagram mb-0" href="​https://​www.instagram.com/​blsinternationalservicesltd/"​ target="​_blank"><​i class="​fab fa-fw fa-instagram"></​i></​a>​ </​li>​ 
 +                        <li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-twitter mb-0" href="​https://​twitter.com/​blsintlservices"​ target="​_blank"><​i class="​fab fa-fw fa-twitter"></​i></​a>​ </​li>​ 
 +                        <li class="​list-inline-item">​ <a class="​btn btn-sm shadow px-2 bg-linkedin mb-0" href="​https://​www.linkedin.com/​company/​bls-international-services-ltd/?​originalSubdomain=in"​ target="​_blank"><​i class="​fab fa-fw fa-linkedin-in"></​i></​a>​ </​li>​ 
 +                    </​ul>​ 
 +                </​div>​ 
 +            </​div>​ 
 +            <!-- Divider --> 
 +            <hr class="​mt-4 mb-0">​ 
 + 
 +            <!-- Bottom footer --> 
 +            <div class="​row">​ 
 +                <div class="​container">​ 
 +                    <div class="​d-lg-flex justify-content-between align-items-center py-3 text-center text-lg-start">​ 
 +                        <!-- copyright text --> 
 +                        <div class="​text-muted text-primary-hover">​©BLS International 2024.</​div>​ 
 +                        <!-- copyright links-->​ 
 +                        <div class="​nav mt-2 mt-lg-0">​ 
 +                            <ul class="​list-inline text-primary-hover mx-auto mb-0">​ 
 +                                <li class="​list-inline-item me-0"><​a class="​nav-link py-1 text-muted"​ href="/​MAR/​bls/​privacypolicy">​Privacy policy</​a></​li>​ 
 +                                <li class="​list-inline-item me-0"><​a class="​nav-link py-1 text-muted"​ href="/​MAR/​bls/​cookiespolicy">​Cookies Policy</​a></​li>​ 
 +                                <li class="​list-inline-item me-0"><​a class="​nav-link py-1 text-muted pe-0" href="/​MAR/​bls/​disclaimer">​Disclaimer</​a></​li>​ 
 + 
 +                            </​ul>​ 
 +                        </​div>​ 
 +                    </​div>​ 
 +                </​div>​ 
 +            </​div>​ 
 +        </​div>​ 
 +    </​footer>​ 
 +    <!-- ======================= 
 +    Footer END --> 
 +    <!-- Back to top --> 
 +    <div class="​back-top"></​div>​ 
 +    <!-- Bootstrap JS --> 
 + 
 +    <div class="​modal fade" id="​logoutModal"​ tabindex="​-1"​ role="​dialog"​ aria-labelledby="​scamModalLabel"​ 
 +         ​aria-hidden="​true">​ 
 +        <div class="​modal-dialog modal-dialog-centered"​ role="​document">​ 
 +            <div class="​modal-content">​ 
 +                <div class="​modal-header">​ 
 +                    <h6 class="​modal-title"​ id="​scamModalLabel"> ​ <span style="​font-weight:​600;​color:​black">​Ready to Leave?</​span></​h6>​ 
 +                    <button class="​btn-close"​ type="​button"​ data-bs-dismiss="​modal"​ aria-label="​Close">​ 
 +                    </​button>​ 
 + 
 +                </​div>​ 
 +                <div class="​modal-body scam-body"​ style="​color:​black;​font-size:​medium">​ 
 +                    <​span>​ 
 +                        Select &​quot;​Logout&​quot;​ below if you are ready to end your current session. 
 +                    </​span>​ 
 +                </​div>​ 
 +                <div class="​modal-footer">​ 
 +                    <button class="​btn btn-secondary"​ type="​button"​ data-bs-dismiss="​modal">​Cancel</​button>​ 
 +                    <button class="​btn btn-danger"​ type="​button"​ onclick="​OnLogoutSubmit();">​Logout</​button>​ 
 +                </​div>​ 
 + 
 +            </​div>​ 
 +        </​div>​ 
 +    </​div>​ 
 +    <script src="/​assets/​vendor/​bootstrap/​dist/​js/​bootstrap.bundle.min.js?​v=Bh8LHqeebiyiT0YD5V0-kJ90cboLJ5zbbepAVUEGxqI"></​script>​ 
 + 
 +    <!-- Vendors --> 
 +    <script src="/​assets/​vendor/​tiny-slider/​tiny-slider.js?​v=TUoRPxlDCbgCqz7qhneDUfttB5a74WlyYrm3FOjFZnU"></​script>​ 
 +    <script src="/​assets/​vendor/​purecounterjs/​dist/​purecounter_vanilla.js?​v=faMnyiv1xv8mqVhNEZAf8nONW6FTf7T0o40mEeleNsQ"></​script>​ 
 +    <script src="/​assets/​vendor/​glightbox/​js/​glightbox.js?​v=r0f52UVK7WXq6iGxjyhjV-Y2WjDtpwawIrQaoBtwqE4"></​script>​ 
 +    <script src="/​assets/​vendor/​flatpickr/​js/​flatpickr.min.js?​v=AkQap91tDcS4YyQaZY2VV34UhSCxu2bDEIgXXXuf5Hg"></​script>​ 
 +    <script src="/​assets/​vendor/​choices/​js/​choices.min.js?​v=GGLVnYaVIFDbccxWOhWJiXbdGgmWv7nDSer8VyCQSBk"></​script>​ 
 +    <script src="/​assets/​vendor/​jarallax/​jarallax.min.js?​v=051mEhTXV1pINFHbbB6peqpAeo2lEkRMtXVe59eo8Xo"></​script>​ 
 +    <script src="/​assets/​vendor/​jarallax/​jarallax-video.min.js?​v=hfysllUmwJ3on3niY5cibYd5iwOz1MZ-A5aKYxeD0fw"></​script>​ 
 + 
 +    <!-- ThemeFunctions --> 
 +    <script src="/​assets/​js/​functions.js?​v=TbMKeJx-U07R1sXdRBqHpmGBu1Oh1AfWjFjDMY8fuOA"></​script>​ 
 +    <script src="/​js/​site.js?​v=KZhE6R9IutBwAcH2dhNWj-BkFRm9WXFHt-59TQi7rAo"></​script>​ 
 + 
 +    <​script>​ 
 +        var iframeOpenUrl = "";​ 
 +        var globalPopups = GetStack();​ 
 +        var globalCallBack = null; 
 +        var globalWindowSender = null; 
 +        function OnLanguageChange(lng) { 
 + 
 +            if (lng === '​en-US'​) { 
 +                return false; 
 +            } 
 +            ShowLoader();​ 
 +            $.ajax({ 
 +                type: "​POST"​, 
 +                url"/​MAR/​account/​ChangeLanguage?​hdnLang="​ +lng, 
 +                successfunction (response) { 
 +                    HideLoader();​ 
 +                    if (response != ""​ && response != null && response.success === true) { 
 +                        window.location.href = window.location.href;​ 
 +                    } 
 +                }, 
 +                errorfunction (response) { 
 +                    HideLoader();​ 
 +                    alert("​error"​);​ 
 +                }, 
 +            }); 
 +              return false; 
 +        } 
 +        function OnLogout() { 
 +            $('#​logoutModal'​).modal('​show'​);​ 
 +        } 
 +        function OnLogoutSubmit() { 
 +            ShowLoader();​ 
 +            $.ajax({ 
 +                type"​POST",​ 
 +                url"/​MAR/​account/​logout",​ 
 +                successfunction (response) { 
 +                    HideLoader();​ 
 +                    if (response != ""​ && response != null && response.success === true) { 
 +                        window.location.href = response.ru;​ 
 +                    } 
 +                }, 
 +                error: function (response) { 
 +                    HideLoader();​ 
 +                    alert(response.error);​ 
 +                }, 
 +            }); 
 +            return false; 
 +        } 
 +    </script>​ 
 +     
 +    <script src="/assets/​vendor/​kendo/​js/​kendo.all.min.js?​v=PO_iEpMMumS6ezVxpHt1IpXsBBwz5RAz-jXCrshdYLM"></​script>​ 
 + 
 +</​body>​ 
 +</​html>​
  • tutoriel/script_shell.txt
  • Dernière modification: Le 29/02/2024, 12:55
  • par Amiralgaby