Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#51 Le 04/08/2025, à 22:55

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ba on pourrait faire :

valid_ip() {
    local  ip=$1
    local  retour=1

    OIFS=$IFS
    IFS='.'
    read -r -a ip <<< "$ip"
    IFS=$OIFS
    [ ${ip[0]} -gt 0 ] && [ ${ip[0]} -le 255 ] &&
    [ ${ip[1]} -ge 0 ] && [ ${ip[1]} -le 255 ] &&
    [ ${ip[2]} -ge 0 ] && [ ${ip[2]} -le 255 ] &&
    [ ${ip[3]} -ge 0 ] && [ ${ip[3]} -le 255 ]
    retour=$?
    return $retour
}

pourquoi pas si c' est mieux ?

de cette maniere ca ne m' oblige pas à re ecrire le code , alors qu ' avec ta fonction je serais obligé de  re ecrire d' autre partie du code .

Dernière modification par iznobe (Le 04/08/2025, à 23:02)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#52 Le 04/08/2025, à 22:57

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

ma boucle tient sur une ligne. big_smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#53 Le 04/08/2025, à 23:03

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ba montre la fonction exacte tongue



Watael a écrit :

ma boucle tient sur une ligne. big_smile

ma fonction ne comporte pas de boucle big_smile => plus performant tongue

Dernière modification par iznobe (Le 04/08/2025, à 23:07)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#54 Le 04/08/2025, à 23:20

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

ça

    OIFS=$IFS
    IFS='.'
    read -r -a ip <<< "$ip"
    IFS=$OIFS

c'est mal.

validIP()
{
   local -i nbErr
   IFS='.' read -ra IP <<<$1 # comme ça, c'est bien. ;)
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error $i; nbErr+=1;}; done
   return $nbErr
}

quatre itérations de la boucle, ta machine va supporter la charge ? lol

edit : return $nbErr

Dernière modification par Watael (Le 04/08/2025, à 23:35)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#55 Le 04/08/2025, à 23:26

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

validIP()
{
   local -i nbErr
   IFS='.' read -ra IP <<<$1 # comme ça, c'est bien. ;)
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error $i; nbErr+=1;}; done
   return nbErr
}

peut etre , mais la variable IFS , tu ne la remet pas comme à l' origine ?

shellcheck =>

$ shellcheck myscript
 
Line 6:
   IFS='.' read -ra IP <<<$1 # comme ça, c'est bien. ;)
                          ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: (apply this, apply all SC2086)
   IFS='.' read -ra IP <<<"$1" # comme ça, c'est bien. ;)
 
Line 7:
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error $i; nbErr+=1;}; done
            ^-- SC2068 (error): Double quote array expansions to avoid re-splitting elements.
>>                                                                                     ^-- SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean: (apply this, apply all SC2086)
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error "$i"; nbErr+=1;}; done
 
Line 8:
   return nbErr
          ^-- SC2152 (error): Can only return 0-255. Other data should be written to stdout.
 $ 

.
yikes  lol

Dernière modification par iznobe (Le 04/08/2025, à 23:31)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#56 Le 04/08/2025, à 23:34

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

peut etre , mais la variable IFS , tu ne la remet pas comme à l' origine ?

non, parce qu'elle n'est pas modifiée dans l'environnement, mais uniquement localement pour la commande read.

$1 est réputée être une IP, soit un seul mot; alors, je me dispense de guillemets
${IP[@]} est un tablea de nombres (qui sont insécables); alors, je me dispense de guillemets.

ah, j'ai oublié un $; je corrige.

Dernière modification par Watael (Le 04/08/2025, à 23:36)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#57 Le 04/08/2025, à 23:42

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

y a ca aussi :

while [[ -z "$IP" ]]; do
             ^-- SC2128 (warning): Expanding an array without an index only gives the first element.

vu que tu met IP en tableau dans la fonction .

Aprés , heureusement , y a des " unset IP " dans la fonction control_ip , mais c' est tordu ton truc tongue


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#58 Le 04/08/2025, à 23:46

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

sans parler de ta boucle ( encore plus tordue tongue ) en rapport au comparaisons numériques , je trouve ça plus propre pour le coup :

valid_ip() {
    local  ip=$1
    local  retour=1

    IFS='.' read -ra ip <<< "$ip"
    [ ${ip[0]} -gt 0 ] && [ ${ip[0]} -le 255 ] && [ ${ip[1]} -ge 0 ] && [ ${ip[1]} -le 255 ] && [ ${ip[2]} -ge 0 ] && [ ${ip[2]} -le 255 ] && [ ${ip[3]} -ge 0 ] && [ ${ip[3]} -le 255 ]
    retour=$?
    return $retour
}

au moins les variables IP des autres fonctions et ip de celle-là sont bien distinctes .

Dernière modification par iznobe (Le 04/08/2025, à 23:48)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#59 Le 04/08/2025, à 23:56

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

on peut ajouter IP au local -i nbErr

local -i nbErr IP

comme ça, pas d'interférence avec une variable du script.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#60 Le 05/08/2025, à 00:00

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

tiens justement , c' est quoi : " local -i " ? big_smile


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#61 Le 05/08/2025, à 00:06

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) 

pour chaque index du tableau ;
si n est incrementé , alors i peut etre compris entre 0 et 255 , sinon , i est compris entre 1 et 255 .
si je traduis bien ton code , tu as fait une bourde , puisque c' est le contraire que l' on veut : i peut etre compris entre 1 et 255 ( quand n est pas incementé ) , sinon , i est compris entre 0 et 255 pour les 3 bits suivants .

me trompe je ?
a moins que ce ne soit justement l' inverse big_smile

Dernière modification par iznobe (Le 05/08/2025, à 00:28)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#62 Le 05/08/2025, à 00:06

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

c'est la définition d'une variable locale numérique (-i pour integer).


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#63 Le 05/08/2025, à 00:10

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ok , merci .
mais le " . " ne fait pas parti des entiers ?


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#64 Le 05/08/2025, à 00:49

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

quel point ?

n++ ? # n a-t-il une valeur
#alors
i >=0 && i<=255 #c'est le cas à partir du deuxième tour de la boucle
#sinon :
i>0 && i<=255 #c'est le cas lors du premier tour

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#65 Le 05/08/2025, à 00:54

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Allez , juste pour le fun big_smile

#!/bin/bash

valid_ip() {
    IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

while [[ -z "$IP" ]]
do
    read -rp "Entrez l'adresse IP de votre imprimante : " IP
    if valid_ip "$IP"; then echo "$IP : IP valide"; else echo "$IP : IP non valide"; fi
done
iznobe@iznobe-pc:~$ bash ~/Scripts/testip.sh
Entrez l'adresse IP de votre imprimante : 1.0.0.0
1.0.0.0 : IP valide
iznobe@iznobe-pc:~$ bash ~/Scripts/testip.sh
Entrez l'adresse IP de votre imprimante : 0.1.1.1
0.1.1.1 : IP non valide
iznobe@iznobe-pc:~$ 
Watael a écrit :

quel point ?

ceux qui arrivent dans l' IP donné en argument / parametre à la fonction au depart .

Dernière modification par iznobe (Le 05/08/2025, à 00:58)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#66 Le 05/08/2025, à 01:07

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

le point est le séparateur (défini dans l'IFS), il n'apparaît plus dans le tableau.

un peu comme ça:

$ v=abc.def.hij
$ echo $(IFS='.'; echo $v)
abc def hij

Dernière modification par Watael (Le 05/08/2025, à 01:12)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#67 Le 05/08/2025, à 01:18

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Watael a écrit :

on peut ajouter IP au local -i nbErr

local -i nbErr IP

comme ça, pas d'interférence avec une variable du script.

iznobe a écrit :

tiens justement , c' est quoi : " local -i " ? big_smile

Watael a écrit :

c'est la définition d'une variable locale numérique (-i pour integer).

iznobe a écrit :

ok , merci .
mais le " . " ne fait pas parti des entiers ?

Watael a écrit :

quel point ?

iznobe a écrit :

ceux qui arrivent dans l' IP donné en argument / parametre à la fonction au depart .

et qui si on indique en debut de fonction :

valid_ip() {
    local -i ip nbError
    ....

la variable locale de type entier de la fonction contiendra des points ...

Dernière modification par iznobe (Le 05/08/2025, à 01:23)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#68 Le 05/08/2025, à 01:22

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

l'IP est dans $1; je ne fais pas ip=$1
je fais

IFS=. read -ra ip <<<$1

come ça, ip est un tableau d'entiers.

Dernière modification par Watael (Le 05/08/2025, à 01:24)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#69 Le 05/08/2025, à 01:29

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

une variable locale tableau dans une variable de type entier , ca passe ?

validIP()
{
   local -i nbErr
   IFS='.' read -ra IP <<<$1 # comme ça, c'est bien. ;)
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error $i; nbErr+=1;}; done
   return nbErr
}

ca donnerait ça non :

validIP()
{
   local -i nbErr IP
   IFS='.' read -ra IP <<<$1 # comme ça, c'est bien. ;)
   for i in ${IP[@]}; do ((n++ ? i >=0 && i<=255 : i>0 && i<=255)) || { >&2 echo error $i; nbErr+=1;}; done
   return nbErr
}

++++++++++++++++++++++++++++++++++++++++++++

2 lignes ! pas mieux ? comme dans des chiffres et des lettres ( a l' envers , le moins de ligne possible ) big_smile

valid_ip() {
    IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

ba on peut toujours faire une ligne avec les 2 instructions tongue :

valid_ip() {
    IFS='.' read -ra ip <<< "$1"; [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

Dernière modification par iznobe (Le 05/08/2025, à 01:32)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#70 Le 05/08/2025, à 01:51

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

2 lignes ! pas mieux ? comme dans des chiffres et des lettres ( a l' envers , le moins de ligne possible ) big_smile

ça a un nom, c'est le bashgolf

ba on peut toujours faire une ligne avec les 2 instructions

mouais, il faut que ce soit lisible, quand même.

et le return !?
=> 3 lignes.
+ la déclaration des variables locales
=> 4 lignes
lol

--
de la mauvaise foi ? oh, si peu. wink


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#71 Le 05/08/2025, à 09:50

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Bonjour , pas besoin du " return " en vrai , puisque automatiquement , ca renvoie deja 0 quand vrai et autre nombre quand faux : $?
et du coup pas besoin de declarer une variable locale non plus .

Dernière modification par iznobe (Le 05/08/2025, à 09:59)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#72 Le 05/08/2025, à 14:46

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

Bonjour , j 'essaie de creer une fonction pour controler / creer un lien symbolique afin d ' epurer le script .
en parametre , je vais donc passer : " le_lien:la_cible " , et je pense utiliser IFS pour separer les 2 champs .
ca se complique vu que je dois partir de base dejà sur un tableau dont je dois dispatcher la donnée en 2 champs séparés tongue

voilà un brouillon vite fait :

verif_lien() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

 	for lien in "${tab[@]}"; do
		IFS=':' read -ra Double_Tab <<< ${tab[@]}
	 	log_action_begin_msg "Recherche du lien ' ${Double_Tab[0]} ' sur votre système"
		if [[ -L "${Double_Tab[0]}" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du lien ' $lien '"
			ln -sv "${Double_Tab[0]}" "${Double_Tab[1]}" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

ca a l' air de fonctionner , mais ca me parait pas trop terrible ...


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#73 Le 05/08/2025, à 15:08

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

voici le dernier script en date :

#!/bin/bash
# Script d'installation pour imprimantes Brother

# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...

. /lib/lsb/init-functions

valid_ip() {
    IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

control_ip() {
	if [[ -n "$IP" ]]; then
		if ( (valid_ip "$IP") ); then
			if ping -c2 "$IP"; then
				echo "# Adresse IP : $IP" &>> "$Logfile"
				log_action_end_msg 0
			else
				log_action_begin_msg "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
				unset IP
				log_action_end_msg 1
			fi
		else
			log_action_begin_msg "L ' adresse IP que vous avez entrée est incorrecte"
			unset IP
			log_action_end_msg 1
		fi
	fi
}

install_pkg() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

	for pkg in "${tab[@]}"; do
		log_action_begin_msg "Recherche du paquet : ' $pkg ' sur votre système"
		if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
			echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
			log_action_end_msg 0
		else
			echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
			log_action_end_msg 1
			log_action_begin_msg "Installation du paquet : ' $pkg ' sur votre système"
			apt-get install -qq "$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

verif_rep() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

	for dir in "${tab[@]}"; do
	log_action_begin_msg "Recherche du dossier ' $dir ' sur votre système"
		if [[ -d "$dir" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du dossier ' $dir '"
			mkdir -pv "$dir" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

verif_lien() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

 	for lien in "${tab[@]}"; do
		IFS=':' read -ra Double_Tab <<< "${tab[@]}"
	 	log_action_begin_msg "Recherche du lien ' ${Double_Tab[0]} ' sur votre système"
		if [[ -L "${Double_Tab[0]}" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du lien ' $lien '"
			ln -sv "${Double_Tab[0]}" "${Double_Tab[1]}" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

Model_Name="$1"
if [ -n "$2" ]; then
	if [ "$2" = "1" ]; then
	Connection="Réseau"
	elif [ "$2" = "0" ]; then
		Connection="USB"
	fi
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$Logfile".old
	fi

	# Si le premier argument est vide on demande le modèle de l'imprimante
	while [[ -z "$Model_Name" ]]; do
		read -rp "Entrez votre modèle d' imprimante : " Model_Name
	done
	Model_Name=${Model_Name^^}
	# Si le 2eme argument est vide on demande comment est connectée l'imprimante
	while [[ -z "$Connection" ]]; do
		read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
		case $REPLY in
			0)
				Connection="USB"
			;;
			1)
				Connection="Réseau"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml $Resetcolor"
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename
			# Architecture : $Arch
			# Modèle de l'imprimante : $Model_Name
			# Type de connexion : $Connection
			# Repertoire courant : $Dir
			# Repertoire de telechargement des pilotes : $Temp_Dir" &>> "$Logfile"
	# Si le 3eme argument est vide on demande le ' IP de l'imprimante
	if [[ "$Connection" == "Réseau" ]]; then
		control_ip "$IP"
		while [[ -z "$IP" ]]; do
			read -rp "Entrez l'adresse IP de votre imprimante : " IP
			control_ip "$IP"
	    done
	fi
	# On transforme le nom de l'imprimante ( enleve le " - " )
	Printer_Name="${Model_Name//-/}"
	# On construit l'URL du fichier contenant les informations
	Printer_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	# ???????? pas compris a quoi sert ce controle , ni quelles info il est censé recuperé
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	echo " " &>> "$Logfile"
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
	install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget"

	# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
	if [[ -n $Scanner_Deb ]]; then
		install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
	fi

	# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
	for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
		if [[ "$Model_Name" == "$i" ]]; then
			install_pkg "csh"
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
	verif_rep "/usr/share/cups/model" "/var/spool/lpd"

	# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
	for i in MFC-J4510DW DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
		if [[ "$Model_Name" == "$i" ]]; then
			# log_action_begin_msg "Recherche du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups' sur votre système"
			# if [[ -L /etc/init.d/lpd ]]; then
			# 	log_action_end_msg 0
			# else
			# 	log_action_end_msg 1
			# 	log_action_begin_msg "Creation du lien symbolique '/etc/init.d/lpd ~> /etc/init.d/cups'"
			# 	ln -s /etc/init.d/cups /etc/init.d/lpd
			# 	log_action_end_msg $?
			verif_lien "/etc/init.d/lpd:/etc/init.d/cups"
				# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
				if [[ -L /sbin/init ]]; then
					echo "verification lien /lib/systemd/system/cups.service"
					# log_action_begin_msg "Recherche du lien symbolique '/lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service' sur votre système"
					# if [[ -L /lib/systemd/system/cups.service ]]; then
					# 	log_action_end_msg 0
					# else
					# 	log_action_end_msg 1
					# 	log_action_begin_msg "Creation du lien symbolique '/lib/systemd/system/cups.service ~> /lib/systemd/system/lpd.service'"
					# 	ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
					# 	log_action_end_msg $?
					# 	systemd daemon-reload
					# fi
					verif_lien "/lib/systemd/system/cups.service:/lib/systemd/system/lpd.service"
					systemd daemon-reload
				fi
			#fi
		fi
	done
	echo " " &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Téléchargement des pilotes de l'imprimante" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets si il n' existe pas deja
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	log_action_begin_msg "Recherche des pilotes"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			# On télécharge les pilotes trouvés
			if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
				Url_Deb="$Url_Pkg"/"$pkg"
				echo " - Téléchargement du paquet : $pkg" &>> "$Logfile"
				log_action_begin_msg "Téléchargement du paquet : $pkg"
				wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
				log_action_end_msg $?
			else
				log_action_begin_msg "Le paquet : $pkg a deja été telechargé"
				log_action_end_msg 0
			fi
		fi
	done

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		if [[ ! -f "$Temp_Dir"/"$Udev_Deb" ]]; then
			echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
			wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
			log_action_end_msg $?
		else
			log_action_begin_msg "Le paquet : $Udev_Deb a deja été telechargé"
			log_action_end_msg 0
		fi
	fi
	echo " " &>> "$Logfile"
}

############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	echo "# Installation des pilotes" &>> "$Logfile"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo " - Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo " " &>> "$Logfile"
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	echo "# Configuration de l'imprimante" &>> "$Logfile"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo " - Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			else
				echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
				log_action_end_msg 1
			fi
		done
	fi
	if [[ -n "$Ppd_File" ]]; then
		echo " - Fichier PPD : $Ppd_File trouvé " &>> "$Logfile"
		log_action_end_msg 0
	fi

	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo " - Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
	echo " " &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	echo -e "$Blue Configuration du scanner $Resetcolor"
	echo "# Configuration du scanner" &>> "$Logfile"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Configuration du scanner USB"
			echo " - Configuration du scanner USB" &>> "$Logfile"
			# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
			if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
				echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"
			else
				# ?????????? n ' ajoute pas la regle correctement .
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
				echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
				# On recharge les règles udev
				# udevadm control --reload
				udevadm control --reload-rules
			fi
		elif [[ $Connection == "Réseau" ]]; then
			log_action_begin_msg "Configuration du scanner réseau"
			echo " - Configuration du scanner réseau" &>> "$Logfile"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig4 ]]; then
				sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
				brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig"
				echo " - Copie des bibliotheques nécessaires brsaneconfig" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrcolm.so.1.0.1 .
				ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
				ln -sf libbrcolm.so.1 libbrcolm.so
				cp --force /usr/lib64/libbrscandec.so.1.0.0 "$Lib_Dir"
				ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
				ln -sf libbrscandec.so.1 libbrscandec.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
				ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
				ln -sf libsane-brother.so.1 libsane-brother.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig2 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig2"
				echo " - Copie des bibliotheques nécessaires brsaneconfig2" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
				ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
				ln -sf libbrscandec2.so.1 libbrscandec2.so
				cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
				ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
				ln -sf libbrcolm2.so.1 libbrcolm2.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
				ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
				ln -sf libsane-brother2.so.1 libsane-brother2.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig3 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig3"
				echo " - Copie des bibliotheques nécessaires brsaneconfig3" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
				ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
				ln -sf libbrscandec3.so.1 libbrscandec3.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
				ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
				ln -sf libsane-brother3.so.1 libsane-brother3.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig4 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig4"
				echo " - Copie des bibliotheques nécessaires brsaneconfig4" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
				ln -sf libsane-brother4.so.1 libsane-brother4.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig5 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig5"
				echo " - Copie des bibliotheques nécessaires brsaneconfig5" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
				ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
				ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
				log_action_end_msg 0
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
	echo " " &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd || exit
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

apres nettoyage des comm inutiles et mise enpage plus propre ainsi que quelques modifs , a utiliser de préférence ! :

#!/bin/bash
# Script d'installation pour imprimantes Brother

# todo :
# verification de l' installation des dependances / paquets sur version ubuntu 24.04 et superieures
# multiarch-support , libsane etc ...

. /lib/lsb/init-functions

valid_ip() {
    IFS='.' read -ra ip <<< "$1"
    [[ ${ip[0]} -gt 0 ]] && [[ ${ip[0]} -le 255 ]] && [[ ${ip[1]} -ge 0 ]] && [[ ${ip[1]} -le 255 ]] && [[ ${ip[2]} -ge 0 ]] && [[ ${ip[2]} -le 255 ]] && [[ ${ip[3]} -ge 0 ]] && [[ ${ip[3]} -le 255 ]]
}

control_ip() {
	if [[ -n "$IP" ]]; then
		if ( (valid_ip "$IP") ); then
			if ping -c2 "$IP"; then
				echo "# Adresse IP : $IP" &>> "$Logfile"
				log_action_end_msg 0
			else
				log_action_begin_msg "Votre IP ne permet pas de joindre l ' hote. Eclairer votre imprimante si celle-ci est eteinte , ou bien , corriger votre adresse IP."
				unset IP
				log_action_end_msg 1
			fi
		else
			log_action_begin_msg "L ' adresse IP que vous avez entrée est incorrecte"
			unset IP
			log_action_end_msg 1
		fi
	fi
}

install_pkg() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

	for pkg in "${tab[@]}"; do
		log_action_begin_msg "Recherche du paquet : ' $pkg ' sur votre système"
		if dpkg-query -f '${binary:Package}\n' -W "$pkg" &>/dev/null; then
			echo " - Paquet ' $pkg ' deja installé" &>> "$Logfile"
			log_action_end_msg 0
		else
			echo " - Paquet ' $pkg ' non installé" &>> "$Logfile"
			log_action_end_msg 1
			log_action_begin_msg "Installation du paquet : ' $pkg ' sur votre système"
			apt-get install -qq "$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

verif_rep() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"

	for dir in "${tab[@]}"; do
	log_action_begin_msg "Recherche du dossier ' $dir ' sur votre système"
		if [[ -d "$dir" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du dossier ' $dir '"
			mkdir -pv "$dir" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

verif_lien() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"

 	for lien in "${tab[@]}"; do
		IFS=':' read -ra Double_Tab <<< "${tab[@]}"
	 	log_action_begin_msg "Recherche du lien ' ${Double_Tab[0]} ' sur votre système"
		if [[ -L "${Double_Tab[0]}" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du lien ' $lien '"
			ln -sv "${Double_Tab[0]}" "${Double_Tab[1]}" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

Model_Name="$1"
if [ -n "$2" ]; then
	if [ "$2" = "1" ]; then Connection="Réseau"; elif [ "$2" = "0" ]; then Connection="USB"; fi
fi
IP="$3"
User="$SUDO_USER"
Dir="$(pwd)"/"$(dirname "$0")"
Temp_Dir="/tmp/packages"
Codename="$(lsb_release -cs)"
Arch="$(uname -m)"
date=$(date +%F_%T)
Logfile="/home/$User/brprinter-installer.log"
#Logfile="/home/$User/brprinter-installer.$date.log"
Lib_Dir="/usr/lib/$Arch-linux-gnu"
Url_Inf="http://www.brother.com/pub/bsc/linux/infs"
# Packages :
# https://download.brother.com/pub/com/linux/linux/packages/
Url_Pkg="http://www.brother.com/pub/bsc/linux/packages"

Udev_Rules="/lib/udev/rules.d/60-libsane1.rules"
Udev_Deb="brother-udev-rule-type1-1.0.2-0.all.deb"
Udev_Deb_Url="http://download.brother.com/welcome/dlf006654/$Udev_Deb"

Blue="\\033[1;34m"
Red="\\033[1;31m"
Resetcolor="\\033[0;0m"

#########################
# PRÉPARATION DU SCRIPT #
#########################
do_init_script() {
	# On vérifie qu'on lance le script en root
	if ((EUID)); then
		echo -e "$Red Vous devez lancer ce script en tant que root : sudo bash $0 $Resetcolor"
		exit 0
	fi
	# Si un log existe déjà on le renomme
	if [[ -f $Logfile ]]; then
		mv "$Logfile" "$Logfile".old
	fi

	# Si le premier argument est vide on demande le modèle de l'imprimante
	while [[ -z "$Model_Name" ]]; do
		read -rp "Entrez votre modèle d' imprimante : " Model_Name
	done
	Model_Name=${Model_Name^^}
	# Si le 2eme argument est vide on demande comment est connectée l'imprimante
	while [[ -z "$Connection" ]]; do
		read -rp "Sélectionner le type de connectivité : [0] USB - [1] Réseau , votre choix : "
		case $REPLY in
			0)
				Connection="USB"
			;;
			1)
				Connection="Réseau"
				echo -e "$Red Vous devez d' abord vous assurer que votre imprimante possède une adresse IP fixe. $Resetcolor"
				echo -e "$Red Veuillez consulter le manuel de votre imprimante pour plus de détails : http://support.brother.com/g/b/productsearch.aspx?c=fr&lang=fr&content=ml $Resetcolor"
			;;
		esac
	done

	echo "# Ubuntu Codename : $Codename
			# Architecture : $Arch
			# Modèle de l'imprimante : $Model_Name
			# Type de connexion : $Connection
			# Repertoire courant : $Dir
			# Repertoire de telechargement des pilotes : $Temp_Dir" &>> "$Logfile"
	# Si le 3eme argument est vide on demande le ' IP de l'imprimante
	if [[ "$Connection" == "Réseau" ]]; then
		control_ip "$IP"
		while [[ -z "$IP" ]]; do
			read -rp "Entrez l'adresse IP de votre imprimante : " IP
			control_ip "$IP"
	    done
	fi
	# On transforme le nom de l'imprimante ( enleve le " - " )
	Printer_Name="${Model_Name//-/}"
	# On construit l'URL du fichier contenant les informations
	Printer_Info="$Url_Inf/$Printer_Name"
	# On vérifie l'URL
	if ! wget -q --spider "$Printer_Info"; then
		log_action_end_msg 1
		echo " - Aucun pilote trouvé" &>> "$Logfile"
		echo -e "$Red Aucun pilote trouvé. Veuillez vérifier le modèle de votre imprimante ou visitez la page suivante http://support.brother.com/g/b/productsearch.aspx?c=us&lang=en&content=dl afin de télécharger les pilotes et les installer manuellement. $Resetcolor"
		exit 1
	fi
	# On vérifie que le fichier fournit les informations
	# ???????? pas compris a quoi sert ce controle , ni quelles info il est censé recuperé
	Lnk=$(wget -q "$Printer_Info" -O - | grep LNK - | cut -d= -f2)
	if [[ "$Lnk" ]]; then
		Printer_Info="$Url_Inf/$Lnk"
		echo "# Link to : $Printer_Info" &>> "$Logfile"
	fi
	echo "# Fichier d'informations : $Printer_Info" &>> "$Logfile"
	echo " " &>> "$Logfile"
}

###############################
# VERIFICATION DES PRÉ-REQUIS #
###############################
do_check_prerequisites() {
	echo -e "$Blue Vérification des pré-requis $Resetcolor"
	echo "# Vérification des pré-requis" &>> "$Logfile"
	log_action_begin_msg "Mise à jour de la liste des paquets"
	apt-get update -qq
	log_action_end_msg $?
	# On vérifie que la liste des paquets est installée et on l'installe le cas échéant
	install_pkg "multiarch-support" "lib32stdc++6" "cups" "curl" "wget"

	# Si un pilote pour le scanner a été trouvé on vérifie que la liste des paquets est installée
	if [[ -n $Scanner_Deb ]]; then
		install_pkg "libusb-0.1-4:amd64" "libusb-0.1-4:i386" "sane-utils"
	fi

	# On vérifie que le paquet csh est installé et on l'installe le cas échéant (uniquement pour certaines imprimantes)
	for i in DCP-110C DCP-115C DCP-117C DCP-120C DCP-310CN DCP-315CN DCP-340CW FAX-1815C FAX-1820C FAX-1835C FAX-1840C FAX-1920CN FAX-1940CN FAX-2440C MFC-210C MFC-215C MFC-3220C MFC-3240C MFC-3320CN MFC-3340CN MFC-3420C MFC-3820CN MFC-410CN MFC-420CN MFC-425CN MFC-5440CN MFC-5840CN MFC-620CN MFC-640CW MFC-820CW; do
		if [[ "$Model_Name" == "$i" ]]; then
			install_pkg "csh"
		fi
	done
	# On vérifie que le dossier /usr/share/cups/model et /var/spool/lpd existent et on les crée le cas échéant
	verif_rep "/usr/share/cups/model" "/var/spool/lpd"

	# On vérifie que le lien symbolique /etc/init.d/lpd existe et on le crée le cas échéant (uniquement pour certaines imprimantes)
	for i in DCP-1000 DCP-1400 DCP-8020 DCP-8025D DCP-8040 DCP-8045D DCP-8060 DCP-8065DN FAX-2850 FAX-2900 FAX-3800 FAX-4100 FAX-4750e FAX-5750e HL-1030 HL-1230 HL-1240 HL-1250 HL-1270N HL-1430 HL-1440 HL-1450 HL-1470N HL-1650 HL-1670N HL-1850 HL-1870N HL-5030 HL-5040 HL-5050 HL-5070N HL-5130 HL-5140 HL-5150D HL-5170DN HL-5240 HL-5250DN HL-5270DN HL-5280DW HL-6050 HL-6050D MFC-4800 MFC-6800 MFC-8420 MFC-8440 MFC-8460N MFC-8500 MFC-8660DN MFC-8820D MFC-8840D MFC-8860DN MFC-8870DW MFC-9030 MFC-9070 MFC-9160 MFC-9180 MFC-9420CN MFC-9660 MFC-9700 MFC-9760 MFC-9800 MFC-9860 MFC-9880; do
		if [[ "$Model_Name" == "$i" ]]; then
			verif_lien "/etc/init.d/lpd:/etc/init.d/cups"
			# On crée un lien symbolique vers cups.service si systemd est utilisé : ln -s /lib/systemd/system/cups.service /lib/systemd/system/lpd.service
			if [[ -L /sbin/init ]]; then
				verif_lien "/lib/systemd/system/cups.service:/lib/systemd/system/lpd.service"
				systemd daemon-reload
			fi
		fi
	done
	echo " " &>> "$Logfile"
}

##############################
# TÉLÉCHARGEMENT DES PILOTES #
##############################
do_download_drivers() {
	echo -e "$Blue Téléchargement des pilotes de l'imprimante $Resetcolor"
	echo "# Téléchargement des pilotes de l'imprimante" &>> "$Logfile"
	# On crée le dossier de téléchargement des paquets si il n' existe pas deja
	if [[ ! -d "$Temp_Dir" ]]; then
		mkdir "$Temp_Dir"
	fi
	log_action_begin_msg "Recherche des pilotes"
	# On récupère le nom des paquets disponibles
	Printer_Lpd_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_LPD_DEB - | cut -d= -f2)
	Printer_Cups_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_CUP_DEB - | cut -d= -f2)
	Printer_Drv_Deb=$(wget -q "$Printer_Info" -O - | grep PRN_DRV_DEB - | cut -d= -f2)
	Scanner_Deb=$(wget -q "$Printer_Info" -O - | grep SCANNER_DRV - | cut -d= -f2)
	Scankey_Deb=$(wget -q "$Printer_Info" -O - | grep SCANKEY_DRV - | cut -d= -f2)

	Scanner_Info="$Url_Inf/$Scanner_Deb.lnk"
	Scankey_Info="$Url_Inf/$Scankey_Deb.lnk"

	# On récupère les pilotes du scanner en fonctionnement de l'architecture du système (32-bits ou 64-bits)
	case "$Arch" in
		i*86)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB32 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB32 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		x86_64)
			Scanner_Drv_Deb=$(wget -q "$Scanner_Info" -O - | grep DEB64 | cut -d= -f2)
			Scankey_Drv_Deb=$(wget -q "$Scankey_Info" -O - | grep DEB64 | cut -d= -f2)
			echo "Architecture : $Arch" &>> "$Logfile"
		;;
		*)
			echo "Architecture inconnue: $Arch" &>> "$Logfile"
		;;
	esac

	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb"; do
		# On ajoute la liste des pilotes trouvés au fichier de journalisation
		if [[ -n "$pkg" ]]; then
			echo " - Paquet trouvé : $pkg" &>> "$Logfile"
			# On télécharge les pilotes trouvés
			if [[ ! -f "$Temp_Dir"/"$pkg" ]]; then
				Url_Deb="$Url_Pkg"/"$pkg"
				echo " - Téléchargement du paquet : $pkg" &>> "$Logfile"
				log_action_begin_msg "Téléchargement du paquet : $pkg"
				wget -cP "$Temp_Dir" "$Url_Deb" &>> "$Logfile"
				log_action_end_msg $?
			else
				log_action_begin_msg "Le paquet : $pkg a deja été telechargé"
				log_action_end_msg 0
			fi
		fi
	done

	if [[ -n "$Scanner_Drv_Deb" ]]; then
		if [[ ! -f "$Temp_Dir"/"$Udev_Deb" ]]; then
			echo "# Téléchargement du paquet : $Udev_Deb" &>> "$Logfile"
			log_action_begin_msg "Téléchargement du paquet : $Udev_Deb"
			wget -cP "$Temp_Dir" "$Udev_Deb_Url" &>> "$Logfile"
			log_action_end_msg $?
		else
			log_action_begin_msg "Le paquet : $Udev_Deb a deja été telechargé"
			log_action_end_msg 0
		fi
	fi
	echo " " &>> "$Logfile"
}

############################
# INSTALLATION DES PILOTES #
############################
do_install_drivers() {
	echo -e "$Blue Installation des pilotes $Resetcolor"
	echo "# Installation des pilotes" &>> "$Logfile"
	for pkg in "$Printer_Lpd_Deb" "$Printer_Cups_Deb" "$Printer_Drv_Deb" "$Scanner_Drv_Deb" "$Scankey_Drv_Deb" "$Udev_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			log_action_begin_msg "Installation du paquet : $pkg"
			echo " - Installation par 'dpkg' du paquet : $pkg" &>> "$Logfile"
			dpkg -i --force-all "$Temp_Dir/$pkg" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
	echo " " &>> "$Logfile"
}

#################################
# CONFIGURATION DE L'IMPRIMANTE #
#################################
do_configure_printer() {
	echo " " &>> "$Logfile"
	echo -e "$Blue Configuration de l'imprimante $Resetcolor"
	echo "# Configuration de l'imprimante" &>> "$Logfile"
	# On recherche un fichier ppd
	log_action_begin_msg "Recherche d'un fichier PPD sur votre système"
	echo " - Recherche d'un fichier PPD" &>> "$Logfile"
	for pkg in "$Printer_Cups_Deb" "$Printer_Drv_Deb"; do
		if [[ -n "$pkg" ]] && [[ -f "$Temp_Dir/$pkg" ]]; then
			Ppd_File=$(dpkg --contents "$Temp_Dir/$pkg" | grep ppd | awk '{print $6}' | sed 's/^.//g')
		fi
	done
	if [[ -z "$Ppd_File" ]]; then
		for file in $(find /usr/share/cups/model -type f); do
			if [[ $(grep -i Brother "$file" | grep -E "$Model_Name"|"$Printer_Name") ]]; then
				Ppd_File="$file"
			else
				echo " - Fichier PPD : $Ppd_File non trouvé !" &>> "$Logfile"
				log_action_end_msg 1
			fi
		done
	fi
	if [[ -n "$Ppd_File" ]]; then
		echo " - Fichier PPD : $Ppd_File trouvé " &>> "$Logfile"
		log_action_end_msg 0
	fi

	# On ajoute une nouvelle imprimante
	log_action_begin_msg "Ajout de l'imprimante  $Model_Name"
	echo " - Ajout de l'imprimante $Model_Name" &>> "$Logfile"
	echo " - Backup du fichier /etc/cups/printers.conf.O" &>> "$Logfile"
	cp /etc/cups/printers.conf.O "$Dir" &>> "$Logfile"
	echo " - Arret du service CUPS" &>> "$Logfile"
	systemctl stop cups &>> "$Logfile"
	echo " - Restauration du fichier printers.conf" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf &>> "$Logfile"
	echo " - Redémarrage du service CUPS" &>> "$Logfile"
	systemctl restart cups &>> "$Logfile"
	case "$Connection" in
	"USB")
		sleep 2 && lpadmin -p "$Model_Name" -E -v usb://dev/usb/lp0 -P "$Ppd_File"
	;;
	"Réseau")
		sleep 2 && lpadmin -p "$Model_Name" -E -v lpd://"$IP"/binary_p1 -P "$Ppd_File"
	;;
	esac
	log_action_end_msg $?
	echo " - Restauration du fichier printers.conf.O" &>> "$Logfile"
	cp "$Dir"/printers.conf.O /etc/cups/printers.conf.O &>> "$Logfile"
	echo " " &>> "$Logfile"
}

############################
# CONFIGURATION DU SCANNER #
############################
do_configure_scanner() {
	echo -e "$Blue Configuration du scanner $Resetcolor"
	echo "# Configuration du scanner" &>> "$Logfile"
	if [[ -n "$Scanner_Deb" ]]; then
		if [[ $Connection == "USB" ]]; then
			log_action_begin_msg "Configuration du scanner USB"
			echo " - Configuration du scanner USB" &>> "$Logfile"
			# On ajoute une entrée au fichier /lib/udev/rules.d/60-libsane1.rules
			if grep -q "ATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"; then
				echo " - Règle udev deja presente dans le fichier $Udev_Rules" &>> "$Logfile"
			else
				# ?????????? n ' ajoute pas la regle correctement .
				sed -i "/LABEL=\"libsane_usb_rules_begin\"/a\
				\n# Brother\nATTRS{idVendor}==\"04f9\", ENV{libsane_matched}=\"yes\"" "$Udev_Rules"
				echo " - Règle udev ajoutée dans le fichier $Udev_Rules" &>> "$Logfile"
				# On recharge les règles udev
				# udevadm control --reload
				udevadm control --reload-rules
			fi
		elif [[ $Connection == "Réseau" ]]; then
			log_action_begin_msg "Configuration du scanner réseau"
			echo " - Configuration du scanner réseau" &>> "$Logfile"
			if [[ -x /usr/bin/brsaneconfig ]]; then
				brsaneconfig -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig2 ]]; then
				brsaneconfig2 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig3 ]]; then
				brsaneconfig3 -a name="SCANNER" model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig4 ]]; then
				sed -i '/Support Model/a\
0x029a, 117, 1, "MFC-8690DW", 133, 4\
0x0279, 14, 2, "DCP-J525W"\
0x027b, 13, 2, "DCP-J725DW"\
0x027d, 13, 2, "DCP-J925DW"\
0x027f, 14, 1, "MFC-J280W"\
0x028f, 13, 1, "MFC-J425W"\
0x0281, 13, 1, "MFC-J430W"\
0x0280, 13, 1, "MFC-J435W"\
0x0282, 13, 1, "MFC-J625DW"\
0x0283, 13, 1, "MFC-J825DW"\
0x028d, 13, 1, "MFC-J835DW"' /opt/brother/scanner/brscan4/Brsane4.ini
				brsaneconfig4 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
			elif [[ -x /usr/bin/brsaneconfig5 ]]; then
				# ??????????????
				brsaneconfig5 -a name=SCANNER model="$Model_Name" ip="$IP" &>> "$Logfile"
			fi
			log_action_end_msg $?
		fi
		# On copie les bibliotheques
		if [[ "$Arch" == "x86_64" ]] && [[ -d $Lib_Dir ]]; then
			if [[ -e /usr/bin/brsaneconfig ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig"
				echo " - Copie des bibliotheques nécessaires brsaneconfig" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrcolm.so.1.0.1 .
				ln -sf libbrcolm.so.1.0.1 libbrcolm.so.1
				ln -sf libbrcolm.so.1 libbrcolm.so
				cp --force /usr/lib64/libbrscandec.so.1.0.0 "$Lib_Dir"
				ln -sf libbrscandec.so.1.0.0 libbrscandec.so.1
				ln -sf libbrscandec.so.1 libbrscandec.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother.so.1.0.7 .
				ln -sf libsane-brother.so.1.0.7 libsane-brother.so.1
				ln -sf libsane-brother.so.1 libsane-brother.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig2 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig2"
				echo " - Copie des bibliotheques nécessaires brsaneconfig2" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrscandec2.so.1.0.0 .
				ln -sf libbrscandec2.so.1.0.0 libbrscandec2.so.1
				ln -sf libbrscandec2.so.1 libbrscandec2.so
				cp --force /usr/lib64/libbrcolm2.so.1.0.1 .
				ln -sf libbrcolm2.so.1.0.1 libbrcolm2.so.1
				ln -sf libbrcolm2.so.1 libbrcolm2.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother2.so.1.0.7 .
				ln -sf libsane-brother2.so.1.0.7 libsane-brother2.so.1
				ln -sf libsane-brother2.so.1 libsane-brother2.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig3 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig3"
				echo " - Copie des bibliotheques nécessaires brsaneconfig3" &>> "$Logfile"
				cd "$Lib_Dir" || exit
				cp --force /usr/lib64/libbrscandec3.so.1.0.0 .
				ln -sf libbrscandec3.so.1.0.0 libbrscandec3.so.1
				ln -sf libbrscandec3.so.1 libbrscandec3.so
				cd "$Lib_Dir"/sane || exit
				cp --force /usr/lib64/sane/libsane-brother3.so.1.0.7 .
				ln -sf libsane-brother3.so.1.0.7 libsane-brother3.so.1
				ln -sf libsane-brother3.so.1 libsane-brother3.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig4 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig4"
				echo " - Copie des bibliotheques nécessaires brsaneconfig4" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				ln -sf libsane-brother4.so.1.0.7 libsane-brother4.so.1
				ln -sf libsane-brother4.so.1 libsane-brother4.so
				log_action_end_msg 0
			elif [[ -e /usr/bin/brsaneconfig5 ]]; then
				log_action_begin_msg "Copie des bibliotheques nécessaires brsaneconfig5"
				echo " - Copie des bibliotheques nécessaires brsaneconfig5" &>> "$Logfile"
				cd "$Lib_Dir"/sane || exit
				ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0 libsane-brother5.so.1
				ln -sf /usr/lib/x86_64-linux-gnu/sane/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0
				ln -sf /opt/brother/scanner/brscan5/libsane-brother5.so.1.0.7 libsane-brother5.so.1.0.7
				log_action_end_msg 0
			else
				log_action_end_msg 1
				echo -e "$Red No config binary found. $Resetcolor"
			fi
		fi
	fi
	echo " " &>> "$Logfile"
}

#################
# FIN DU SCRIPT #
#################
do_clean() {
	cd || exit
	# On supprime le fichier printers.conf.O
	if [[ -e "$Dir"/printers.conf.O ]]; then
		rm "$Dir"/printers.conf.O &>> "$Logfile"
	fi
	# On réattribue les droits des dossiers/fichiers crées à l'utilisateur
	chown -R "$User": "$Temp_Dir" "$Logfile"
	exit 0
}

do_init_script
do_check_prerequisites
do_download_drivers
do_install_drivers
do_configure_printer
do_configure_scanner
do_clean

Dernière modification par iznobe (Le 05/08/2025, à 15:20)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne

#74 Le 05/08/2025, à 15:58

Watael

Re : remise au gout du jour du script de demonipuch imprimante brother

je ne comprends pas pourquoi tu te fais des nœuds comme ça...

admettons que tu exécutes la fonction ainsi :

verif_lien "/etc/init.d/lpd" "/etc/init.d/cups"

tout devient très simple :

verif_lien()
{
   lien=$1
   cible=$2
   if ! test -L "$lien"; then ln -s "$cible" "$lien"; fi
}

KISS!


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#75 Le 05/08/2025, à 16:26

iznobe

Re : remise au gout du jour du script de demonipuch imprimante brother

ro ba c ' est tout de meme pas si compliqué que ça big_smile
faut juste peit etre mettre des noms plus parlant  , mais ca ne change pas grand chose :

verif_lien() {
	read -ra tab <<< "$1 $2 $3 $4 $5 $6 $7 $8 $9"
	#echo ${tab[@]}

 	for link in "${tab[@]}"; do
		IFS=':' read -ra split_link_target <<< ${tab[@]}
    local lien="${split_link_target[0]}" cible="${split_link_target[1]}"
	 	
    log_action_begin_msg "Recherche du lien ' $lien ' sur votre système"
		if [[ -L "$lien" ]]; then
			log_action_end_msg 0
		else
			log_action_end_msg 1
			log_action_begin_msg "Creation du lien ' $link '"
			ln -sv "lien" "cible" &>> "$Logfile"
			log_action_end_msg $?
		fi
	done
}

Dernière modification par iznobe (Le 05/08/2025, à 16:36)


retour COMPLET et utilisable de commande  |  script montage partitions

MSI Z490A-pro , i7 10700 , 32 GB RAM .

Hors ligne