bonjour,
pour apprendre rien de tel qu'un projet...
Prélude
Je fais des tutos et donne des infos qui sont souvent regroupable en suites qui peuvent donner des scripts...
Souvent je sais qu'une fonction existe mais la syntaxe et les options ne me rentrent pas dans la tête...
L'idée de se script est de réunir les principaux besoins en terme de log (écriture), fichier conf (lecture et écriture), quelques parseurs pour faire tout ça, l'utilisation simple de fonctions, les variables, zenity...
le but ici sera d'installer ou plutôt recréer un ensemble de scripts et sous scripts et de créer le "programme ultime" de post installation de ubuntu (et même pour d'autres distributions).
Pour l'instant, le lanceur principal.
Le projet :
Pour automatiser et simplifier le lancement de ces scripts, j'ai pensé à un lanceur de script.
Pour comprendre, j'ai fais un hello world et un ensemble pour la post install de ubuntu 16.04+
on le verra dans le prochain post
Chaque script peut être lancé sans le lanceur qui ne sert qu'à regrouper et donner une interface graphique.
Dans les scripts le mot de passe root peut être demandé. Il le sera à chaque premier sudo de chaque script et éventuellement d'autre fois si le script s'éternise.
Dans cette première partie je vais donner les instructions qui permettent de créer le système de lanceur en ligne de commande pour n'avoir à faire que du copier coller.
PS :
pas de sudo, on joue à domicile !
On y va !
Ouvrez un terminal et passez le au premier plan (clic droit dans la barre du haut puis "mettre au premier plan"),
réduisez sa taille pour pouvoir lire et copier les lignes de code qui vont suivre :
au cas où il n'existerait pas encore, on crée un dossier bin dans le dossier personnel
qui servira à regrouper tous les script.
NB : quand ce dossier est présent, Ubuntu l'ajoute automatiquement au PATH
(sans doute après avoir relancer la session)
mkdir $HOME/bin
tous les scripts personnels de chaque utilisateur doivent (selon la norme...) être ici.
NB : $HOME : voir les
variables d'environnement -> $HOME : /home/nom_de_l_utilisateur
On crée un dossier pour tester
mkdir $HOME/bin/lanceur
on ajoute le programme à proprement parlé en l'éditant avec gedit
gedit $HOME/bin/lanceur/installer.sh
copier / coller le code suivant
#!/bin/bash
# nomlogiciel="$(basename "$0")"
nomlogiciel="${0##*/}"
# FONCTION=""
VERSION="alpha"
# NOTES DE VERSIONS
# function _initialisation {
echo "*******************initialisation*******************" ;
# SCRIPT_PATH="$(pwd)/${0%/*}/" ;
SCRIPT_PATH="$(pwd)" ;
INSTALL_PATH="${SCRIPT_PATH}/bin/" ;
TWEAKLIST_FILE="${SCRIPT_PATH}/tweaklist" ;
FICHIER_LOG="installer.log" ;
FICHIER_INI="installer.ini" ;
function _journal {
FICHIER_LOG="$nomLogiciel.log" ;
if [ ! -f "$FICHIER_LOG" ]; then
echo "CreateLogfile : $FICHIER_LOG" ;
touch "$FICHIER_LOG";
fi
}
function journal {
echo "$@"|tee -a "$FICHIER_LOG" ;
}
echo "ouverture du journal" ;
_journal
# charger Initialisation
function _ini_File {
if [ -f "$FICHIER_INI" ];
then
chargerIni ;
else
touch "$FICHIER_INI" ;
sauverIni ;
fi
}
function chargerIni {
while read line ;
do
parserLigneIni "$line" ;
done < "$FICHIER_INI" ;
}
function sauverIni {
# cd "$SCRIPT_PATH"
printf '%s' "SCRIPT_PATH=$SCRIPT_PATH
INSTALL_PATH=$INSTALL_PATH
TWEAKLIST_FILE=$TWEAKLIST_FILE
" > "$SCRIPT_PATH/$FICHIER_INI" ;
}
# # journal "Chargement..." "parserLigneIni"
function parserLigneIni {
i=$@ ;
case $i in
# xxxxx=*) xxxxxx="${i#*=}" ;;
SCRIPT_PATH=*) SCRIPT_PATH="${i#*=}" ;;
INSTALL_PATH=*) INSTALL_PATH="${i#*=}" ;;
TWEAKLIST_FILE=*) TWEAKLIST_FILE="${i#*=}" ;;
esac
}
_ini_File ;
function _quitter {
# mettre ici tout ce qui sera nescessaire à la bonne fermeture
sauverIni ;
exit 0
}
# ---------------------------------------------------
# Choisir le dossier des modules
INSTALL_PATH=$(zenity --file-selection \
--filename="${INSTALL_PATH}" \
--title="Veuillez selectionner un dossier" \
--text="Choissisez un dossier quelconque
Annulez pour conserver
${INSTALL_PATH}
" \
--directory);
if [ $? = 0 ]
then
echo "Le dossier est : "
echo ${INSTALL_PATH} ;
echo "***************************** "
else
_quitter
fi
# création de la liste de tweaks
TWEAKLIST_FILE="${SCRIPT_PATH}/tweaklist"
ls "${INSTALL_PATH}/" > "$TWEAKLIST_FILE"
title="Choisissez des options"
my_text="Sélectionnez les modules à installer"
nbreArg=0
ARG=""
# Changement du caractère de séparation de zenity
OLDIFS="$IFS"
IFS='|'
while read line
do
# journal "${line}" ;
if [ "$(ls "${INSTALL_PATH}/$line/" | grep "install.sh" ;)"="install.sh" ] ; then
nbreArg="$(expr $nbreArg + 1)"
# ARG=$(echo "${ARG}"TRUE"|${line}|")
# ou ARG=$(echo "${ARG}"FALSE"|${line}|")
ARG=$(printf '%s' "${ARG}FALSE|${line}|")
fi
done < "${TWEAKLIST_FILE}" ;
mesSelections="$(zenity --list --separator="$IFS" \
--width=500 --height=650 \
--title="$title" \
--text "$my_text" --checklist \
--column "choix" --column "Valeur" \
${ARG};)";
if [ $? = 0 ]
then
echo "Continuer "
echo "***************************** "
else
_quitter
fi
echo -n > "${TWEAKLIST_FILE}"
for uneSelection in ${mesSelections} ; do
echo $uneSelection >> "${TWEAKLIST_FILE}"
done
# Rétablissement du caractère de séparation dans Zenity
IFS="$OLDIFS"
# "Installer Packs"
cd "${INSTALL_PATH}/"
#récupère le nom des tweaks (uniquement) du fichier tweaklist par ligne
while read line
do
if [ "$(ls "${INSTALL_PATH}/$line/" | grep "install.sh" ;)"="install.sh" ] ;then
cd "$line/"
xterm -e "./install.sh"
cd ..
fi
done < "${TWEAKLIST_FILE}" ;
cd "$SCRIPT_PATH"
_quitter ;
exit 0
Enregistrez et fermer gedit (ctrl + s puis ctrl + q)
on rend le fichier exécutable
chmod +x $HOME/bin/lanceur/installer.sh
et on continue les créations...
ici un dossier qui servira de dossier par défaut et pour faire des tests
mkdir $HOME/bin/lanceur/bin
maintenant on crée le premier module
pour mettre plusieurs modules dans un ordre déterminé, il suffit de faire commencer le nom par un nombre
on verra ça dans le module exemple de "post install"
mkdir "$HOME/bin/lanceur/bin/hello word"
gedit "$HOME/bin/lanceur/bin/hello word/install.sh"
copier / coller le code suivant
#!/bin/bash
# ----------------------------------------------
FONCTION="Hello World" ;
VERSION="alpha" ;
# NOTES DE VERSIONS
echo "lancement
$FONCTION..." ;
zenity --info --text="$FONCTION" ;
exit 0
on le rend exécutable
chmod +x "$HOME/bin/lanceur/bin/hello word/install.sh"
plus qu'à lancer le programme de base pour voir si cela marche
./bin/lanceur/installer.sh
cd ~/bin/lanceur/
./installer.sh
au premier lancement, le script vous demande de choisir un dossier en partant de votre dossier personnel ~/bin
entrez dedans puis entrez dans le dossier lanceur que vous avez créé puis dans le dossier bin
(les prochaines fois, le programme partira directement du dossier bin du programme)
choisissez bin mais n'entrez pas dans "hello world"... validez
cochez hello word puis lancez le script par l'interface de zenity
... ça va afficher la fenêtre Zenity avec "Hello World"
j'ajouterai par la suite la création d'un lien entre le script et le dossier bin personnel
-----------------------------------------------------------------------------
edit du 29/05//2017 :
Pour info je met mon script en état d'avancement v.0.39 :
#!/bin/bash
# Pour éviter d'accéder en lecture à une variable n'ayant pas d'existence,
# on peut inscrire la commande set -u en début de script.
set -u
NOM_DU_LOGICIEL="${0##*/}"
FONCTION="lanceur de scripts ; installeurs, patchs, ppa,..."
VERSION="0.39"
#~**************************************************************
#~l'utilisateur est il sudoer ?
#~**************************************************************
#~echo "l'utilisateur est il sudoer ?"
#~[ -n "$( groups $USER | grep sudo )" ] && echo oui || echo non
[ -n "$( groups $USER | grep sudo )" ] || {
msgbox "ATTENTION - $USER n'est pas sudoer et ne pourra pas exécuter certaines fonctions"
# exit 1
}
#~**************************************************************
#
CHEMIN_DU_PGM="${PWD}" ;
CHEMIN_DE_DATA="${CHEMIN_DU_PGM}/data" ;
CHEMIN_DES_IMAGES="${CHEMIN_DU_PGM}/images" ;
CHEMIN_DES_MODULES="${CHEMIN_DU_PGM}/data" ;
FICHIER_TWEAKLIST="${CHEMIN_DU_PGM}/tweaklist" ;
FICHIER_LOG="${CHEMIN_DU_PGM}/${NOM_DU_LOGICIEL}.log" ;
FICHIER_INI="${CHEMIN_DU_PGM}/${NOM_DU_LOGICIEL}.ini" ;
FICHIER_AIDE="${CHEMIN_DU_PGM}/LisezMoi.txt" ;
SITE_DOWNLOAD="http://www.kholo-informatique.fr/download"
IMG_SPLASH="PIL2017-logo.png"
#~**************************************************************
function localisation () {
echo "
appel de : localisation
argument : ${@}"
VA="Créer un choix de liste"
VB="Voir le choix de liste en cours"
VC="Lancer le choix de liste"
VH="Téléchargement"
VI="voir l'aide"
VZ="Quitter"
txt_LAQUESTION="
----------------------
Ce module est le lanceur des ensembles d'installateurs
Vous allez pouvoir choisir un dossier dans lequel se trouvent les dossiers des installeurs
Une fois lancé, vous aurez des cases à cocher pour sélectionner des actions à réaliser
Pour chaque action, vous aurez une explication et la possibilité d'annuler le lancement
----------------------
double cliquez sur une ligne pour la lancer ou clic simple puis lancer avec le bouton valider
"
txt_ok_label="Appliquer"
# txt_cancel_label="Quitter"
txt_cancel_label="Sélectionnez puis --->"
txt_choice="choix"
txt_value="Valeur"
txt_Dossier_install="Dossier d'installation"
txt_Choisissez_Options="Choisissez des options"
txt_Select_Modules="Sélectionnez les modules à installer"
txt_Select_Dossier="Veuillez selectionner un dossier"
txt_Select_DossierInfos="Choissisez un dossier quelconque
Annulez pour conserver "
txt_FICHIER_AIDE="POST INSTALLATION UBUNTU 16.04 - Le PC à Kiki
Suite à ce tuto initialement posté sur le forum de Ubuntu fr
https://forum.ubuntu-fr.org/viewtopic.php?id=1993089
transcription en script bash.
Principe :
Le script principal n'est qu'un luncheur qui recense les dossiers
contenu dans un dossier à choisir
ET qui contiennent des dossiers avec un fichier install.sh
puis écrit les informations dans un fichier texte (tweaklist)
pour le reprendre ensuite et installer chaque ligne comme un nom de dossier
dans lequel se trouve le fichier install.sh
Chaque install.sh peut être lancé indépendement sans dépendance.
Il sont tous commencés par une fenetre en zenity pour expliquer le script
et pouvoir éventuellement sortir.
tout est lancé dans un sous terminal qui permet de lire les retours éventuels.
Utilisation :
lancer $0 (pas de droits élevés)
$0
choisir un dossier dans data/
cocher les actions à accomplir
lancer et donner le mot de passe root pour chaque nouvelle action
si celui ci est demandé.
TODO installation des dépendances :
la totalité des pgms utilisés doivent faire parti du système ou de bash :
cd, zenity, sed, echo, function,..."
}
localisation ;
#~**************************************************************
if [ ! -d "${CHEMIN_DE_DATA}" ] ; then
journal "Erreur de chemin - création dossier data" ;
mkdir "${CHEMIN_DE_DATA}" ;
fi
if [ ! -d "${CHEMIN_DES_IMAGES}" ] ; then
journal "Erreur de chemin - création dossier images" ;
mkdir "${CHEMIN_DES_IMAGES}" ;
# TODO téléchagements de compléments
wget "${SITE_DOWNLOAD}/images/${IMG_SPLASH}" -O "${CHEMIN_DES_IMAGES}/${IMG_SPLASH}"
fi
#~**************************************************************
function splashScreen () {
(echo "<h1>PIL v$VERSION</h1><img src=\"data:"
mimetype -b "$1"
echo -n ";base64,"
base64 "$1"
echo "\">" ;) | zenity --text-info --width=400 --height=500 --ok-label="Go" --cancel-label="" --html --filename=/dev/stdin
}
splashScreen "${CHEMIN_DES_IMAGES}/${IMG_SPLASH}" >/dev/null ;
#~**************************************************************
echo "ouverture du journal" ;
function _journal () {
# FICHIER_LOG="$NOM_DU_LOGICIEL.log" ;
[ -f "${FICHIER_LOG}" ] || { touch "${FICHIER_LOG}" ;
echo "Création du fichier de log : ${FICHIER_LOG##*/}" ;
}
}
function journal () { echo "[$(date +%H:%M:%S)] ${@}" | tee -a "${FICHIER_LOG}" >/dev/null ; }
_journal ;
echo -n | tee "${FICHIER_LOG}" >/dev/null ;
journal "$(date)
lancement principal
argument : ${@}"
#~**************************************************************
function _iniFile () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
if [ -f "${FICHIER_INI}" ]; then
chargerIni ;
else
journal "création fichier ini"
touch "${FICHIER_INI}" ;
sauverIni ;
fi
journal "sortie ${FUNCNAME} : $?"
}
function chargerIni () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
while read line ;
do
parserLigneIni "$line" ;
done < "${FICHIER_INI}" ;
if [ ! -d "$CHEMIN_DU_PGM" ] ;
then
localisation ;
journal "Erreur de chemin - fichier ini ré-initialisé" ;
sauverIni ;
fi
journal "sortie ${FUNCNAME} : $?"
}
function sauverIni () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
echo "CHEMIN_DU_PGM=${CHEMIN_DU_PGM}
FICHIER_TWEAKLIST=${FICHIER_TWEAKLIST}
FICHIER_LOG=${FICHIER_LOG}
FICHIER_INI=${FICHIER_INI}
FICHIER_AIDE=${FICHIER_AIDE}
CHEMIN_DE_DATA=${CHEMIN_DE_DATA}
CHEMIN_DES_IMAGES==${CHEMIN_DES_IMAGES=}
CHEMIN_DES_MODULES=${CHEMIN_DES_MODULES}
" | tee "${FICHIER_INI}" >/dev/null ;
journal "sortie ${FUNCNAME} : $?"
}
function parserLigneIni () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
i=${@} ;
case $i in
#~xxxxx=*) xxxxxx="${i#*=}" ;;
CHEMIN_DU_PGM=*) CHEMIN_DU_PGM="${i#*=}" ;;
FICHIER_TWEAKLIST=*) FICHIER_TWEAKLIST="${i#*=}" ;;
FICHIER_LOG=*) FICHIER_LOG="${i#*=}" ;;
FICHIER_INI=*) FICHIER_INI="${i#*=}" ;;
FICHIER_AIDE=*) FICHIER_AIDE="${i#*=}" ;;
CHEMIN_DE_DATA=*) CHEMIN_DE_DATA="${i#*=}" ;;
CHEMIN_DES_IMAGES==*) CHEMIN_DES_IMAGES=="${i#*=}" ;;
CHEMIN_DES_MODULES=*) CHEMIN_DES_MODULES="${i#*=}" ;;
esac
}
_iniFile ;
#~**************************************************************
function msgbox () {
zenity --info --text="${@}" --no-wrap ;
}
function _quitter () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
#~mettre ici tout ce qui sera nescessaire à la bonne fermeture
sauverIni
exit 0
}
function FRM_PRINCIPALE () {
zenity --list --width=600 --height=480 --text="${txt_LAQUESTION}" \
--ok-label="${txt_ok_label}" \
--cancel-label="${txt_cancel_label}" \
--column "${txt_choice}" --column "${txt_value}" \
1 "$VA" 2 "$VB" 3 "$VC" 0 "" 7 "$VH - désactivé" 8 "$VI" 9 "$VZ" ;
journal "sortie ${FUNCNAME} : $?"
}
function AfficherTweaklist () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
local retours
local retours2
local retoursX
retours=${CHEMIN_DES_MODULES}
retours2=${retours%'/'*}
let "LG = ${#retours} - ${#retours2}"
retoursX=${retours:${#retours2}:$LG}
msgbox "$txt_Dossier_install :\n$retoursX\n---------------------\n$(cat "${FICHIER_TWEAKLIST}")"
journal "sortie ${FUNCNAME} : $?"
}
function afficher_aide () {
msgbox "$(echo "$txt_FICHIER_AIDE")"
}
function MaJDesData (){
journal "appel de : ${FUNCNAME}
argument : ${@}"
local CHEMIN_COURANT="${PWD}"
cd "${CHEMIN_DE_DATA}"
# VERSIONs de kiPIL
# leFICHIER="$(curl ${SITE_DOWNLOAD}/version.txt)" >/dev/null ;
# msgbox "Votre version : $VERSION\nversion web ${leFICHIER}"
local lesData="$(curl ${SITE_DOWNLOAD}/data.txt)" >/dev/null ;
IFS=$'\n' lesData=( $lesData )
for undata in ${lesData[@]} ; do
journal "------ Téléchargement de $undata ------"
# msgbox "------ Téléchargement de $undata ------"
wget "${SITE_DOWNLOAD}/$undata" && \
unzip $undata && \
rm -f $undata
journal "sortie wget $undata : $?"
continue
done
# BUG : il reste un répertoire A VOIR
rm -f "data-programmes.zip"
cd "${CHEMIN_COURANT}"
journal "sortie ${FUNCNAME} : $?"
}
function MaJpiKIL () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
msgbox "TODO - lancement de : MaJpiKIL"
journal "sortie ${FUNCNAME} : $?"
}
function choisirTelechagements () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
zenity --list \
--checklist \
--title="Téléchagement" \
--text="" \
--column="" --column="Mettre à jour" \
FALSE "1- le programme piKIL" TRUE "2- les Datas"
journal "sortie ${FUNCNAME} : $?"
}
function telechargement () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
local lesCHOIX
local leCHOIX
local unChoix
lesCHOIX="$(choisirTelechagements)"
# echo "lesCHOIX=$lesCHOIX"
# [ -n $lesCHOIX ] && {
IFS='|' leCHOIX=( $lesCHOIX )
for unChoix in ${leCHOIX[@]}
do
case $unChoix in
1-*) MaJpiKIL ;;
2-*) MaJDesData ;;
*) journal "erreur - sortie de telechargement \n$unChoix";;
esac
done
# } || msgbox "erreur : lesCHOIX=$lesCHOIX"
journal "sortie ${FUNCNAME} : $?"
}
function installerPack () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
local CHEMIN_COURANT="${PWD}"
cd "${CHEMIN_DES_MODULES}/" ;
#~-----> "récupère le nom des tweaks (uniquement) du fichier tweaklist par ligne" ;
while read leChemin
do
if [ "$(ls "${CHEMIN_DES_MODULES}/$leChemin/" | grep "install.sh" ;)"="install.sh" ] ; then
cd "$leChemin/" ;
journal "leChemin : $leChemin"
xterm -e "./install.sh" ;
#~gnome-terminal -e "./install.sh" ;
#~gnome-terminal --command "./install.sh" ;
cd .. ;
fi
done < "${FICHIER_TWEAKLIST}" ;
cd "${CHEMIN_COURANT}" ;
journal "sortie ${FUNCNAME} : $?"
}
#~**************************************************************
function choisirDossierModules () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
local le_titre="${txt_Select_Dossier}" ;
local le_texte="${txt_Select_DossierInfos}
${CHEMIN_DES_MODULES}" ;
zenity --file-selection --directory \
--filename="${CHEMIN_DES_MODULES}/" \
--title="${le_titre}" \
--text="${le_texte}" ;
journal "sortie ${FUNCNAME} : $?"
}
function parserFichierTweaklist () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
nbreArg=0 ;
CHOIX_MODULES="" ;
ls "${CHEMIN_DES_MODULES}/" | tee "${FICHIER_TWEAKLIST}" >/dev/null; #~avec toutes les options possibles
#~cases de la prochaine liste cochées ?
DEF_BOOL="TRUE" ; #~ou "FALSE"
out=$(zenity --list \
--radiolist \
--title="Oui ou Non" \
--text="cases de la prochaine liste cochées ? " \
--column=choix --column=num --column=separateur \
--print-column="2" \
--hide-column="2" \
TRUE 1 "oui" FALSE 2 "non")
case $out in
1 ) DEF_BOOL="TRUE" ;;
2 ) DEF_BOOL="FALSE" ;;
* ) journal "DEF_BOOL >> $out" ; exit 1 ;;
esac
while read ligne ; do
if [ "$(ls "${CHEMIN_DES_MODULES}/${ligne}/" | grep "install.sh" ;)"="install.sh" ] ;
then
nbreArg="$(expr $nbreArg + 1)" ;
# (($nbreArg ++)) ;
CHOIX_MODULES=$(echo "${CHOIX_MODULES}"${DEF_BOOL}"|${ligne}|") ;
fi
done < "${FICHIER_TWEAKLIST}" ;
journal "sortie ${FUNCNAME} : $?"
}
function selectionnerModules () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
local le_titre="$txt_Choisissez_Options" ;
local le_texte="$txt_Select_Modules" ;
zenity --list --separator="$IFS" \
--width=500 --height=650 \
--title="$le_titre" \
--text "$le_texte" --checklist \
--column "choix" --column "Valeur" \
${CHOIX_MODULES} ;
journal "sortie ${FUNCNAME} : $?"
}
function ecrireTweaklistFile () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
# raz TweaklistFile
echo -n > "${FICHIER_TWEAKLIST}" >/dev/null;
# echo -n | tee "${FICHIER_TWEAKLIST}" ;
for uneSelection in ${mesSelections} ;
do
echo $uneSelection | tee -a "${FICHIER_TWEAKLIST}" >/dev/null;
done
journal "sortie ${FUNCNAME} : $?"
}
function corriger_CHEMIN_DES_MODULES () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
if [ ${CHEMIN_DES_MODULES: -2} = "/0" ]; then
CHEMIN_DES_MODULES="${CHEMIN_DES_MODULES%/*}"
#else
#CHEMIN_DES_MODULES="${CHEMIN_DES_MODULES}" ;
fi
journal "sortie ${FUNCNAME} : $?"
}
function corriger_CHEMIN_DES_MODULES2 () {
journal "appel de : ${FUNCNAME}
CHEMIN_DES_MODULES=${CHEMIN_DES_MODULES}
argument : ${@}"
leDossierTest="$(ls "${CHEMIN_DES_MODULES}/" | grep "install.sh" )"
[ "$leDossierTest" = "install.sh" ] && {
cd "${CHEMIN_DES_MODULES}"
cd ..
CHEMIN_DES_MODULES="${PWD}"
cd "${PWD}"
#~else
#~CHEMIN_DES_MODULES="${CHEMIN_DES_MODULES}" ;
}
journal "sortie ${FUNCNAME} : $?"
}
#~**************************************************************
function creerTweaklist () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
CHEMIN_DES_MODULES_new=$(choisirDossierModules) ;
if [ ${#CHEMIN_DES_MODULES_new} -gt 0 ] ; then
CHEMIN_DES_MODULES="${CHEMIN_DES_MODULES_new}"
corriger_CHEMIN_DES_MODULES ; #~bug /0 en fin de sélection d'un dossier !
corriger_CHEMIN_DES_MODULES2 #~au cas où l'utilisateur aurait choisi un dossier d'installation
OLDIFS="$IFS" ; IFS='|' ;
parserFichierTweaklist ;
mesSelections="$(selectionnerModules)" ;
#[ $? = 0 ] || _quitter ;
[ $? = 0 ] && ecrireTweaklistFile ;
IFS="$OLDIFS" ;
fi
journal "sortie ${FUNCNAME} : $?"
}
#~**************************************************************
function FRM_PRINCIPALE_parser () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
case $1 in
1) creerTweaklist ;;
2) AfficherTweaklist ;;
3) installerPack ;;
# 7) telechargement ;;
8) afficher_aide ;;
# 0) ;;
9) _quitter ;;
*) ;;
esac
journal "sortie ${FUNCNAME} : $?"
}
#~**************************************************************
function _main () {
journal "appel de : ${FUNCNAME}
argument : ${@}"
menuchoice=$(FRM_PRINCIPALE);
FRM_PRINCIPALE_parser ${menuchoice%|*} #~pour corriger le 1|1 de zenity
#~on boucle _main ; pour sortir, faire choix quitter
_main
journal "sortie ${FUNCNAME} : $?"
}
#~**************************************************************
#~LE SCRIPT COMMENCE ICI
_main
#~**************************************************************
#~le programme ne devrait pas passer par là !
exit 0