Christophe Casalegno

Linux : fonctions bash que j’utilise dans mes scripts shell

Fonctions shell bash

Bonsoir, aujourd’hui j’ai décidé de vous partager quelques unes des fonctions bash que j’utilise dans mes scripts shell. Pour chacune je vous dit ce qu’elle fait. Il s’agit de microfonctions simples à comprendre et modifier si besoin. Le fichier complet contenant les fonctions est également téléchargeable depuis la page contributions.

scpcopy : Cette fonction bash permet d’effectuer une copie au travers de SCP tout en supportant en port ssh exotique :

function scpcopy()
{
host_ip="$1"
scpuser="$2"
scp_port="$3"
file2cp="$4"
dir2cp="$5"
scp -oPort="$scp_port" "$file2cp" "$scpuser"@"$host_ip":"$dir2cp"
}

remotereplace : Cette fonction bash permet d’effectuer un remplacement via sed au travers de ssh, tout en supportant un port ssh exotique :

function remotereplace()
{
host_ip="$1"
filetomodify="$2"
remoteport="$3"
src="$4"
dst="$5"
ssh -l root -p "$remoteport" "$host_ip" "sed -i \"s#$src#$dst#g\" $filetomodify"
}

remoteexec : Cette fonction bash permet l’execution d’une commande distante au travers de SSH en supportant un port SSH exotique.

function remoteexec()
{
host_ip="$1"
remoteport="$2"
command2exec="$3"
ssh -l root -p "$remoteport" "$host_ip" "$command2exec"
}

keygen : Cette fonction bash permet simplement de générer une paire de clef ssh à distance sur le compte root en supportant un port SSH exotique.

function keygen()
{
host_ip="$1"
ssh -l root -p "$ssh_port" "$host_ip" "ssh-keygen -t rsa -f /root/.ssh/id_rsa -q -P \"\""
}

renhost : Cette fonction bash permet de renommer un host linux (fonctionne sur Debian Stretch)

function renhost()
{
echo -e "${YELLOW} [WARNING]" "${NC} Hostname doesn't match the actual server host, changing server hostname in progress..."
oldhost=$(grep "$ip" /etc/hosts)
newhost="$ip $sxhostcode $hostcode"
$replacer $repoptions "s#$oldhost#$newhost#" /etc/hosts
$replacer $repoptions "s#$HOSTNAME#$hostcode#" /etc/hostname
$replacer $repoptions "s#root@$HOSTNAME#root@$hostcode#" /etc/ssh/*.pub
hostname "$hostcode"
hostnamectl set-hostname "$hostcode"
}

checkip : Cette fonction bash permet de vérifier si le contenu d’une variable correspond bien à une adresse IP.

function checkip()
{
if [[ "$1" =~ (([01]{,1}[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]{,1}[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]{,1}[0-9]{1,2}|2[0-4][0-9]|25[0-5])\.([01]{,1}[0-9]{1,2}|2[0-4][0-9]|25[0-5]))$ ]];
then
echo -e "${GREEN} [ OK ]" "${NC} IP address $1 is ok, install in progress..."
else
echo -e "${RED} [ ERROR ]" "${NC} $1 is not an IP address"
exit 0
fi
}

checkfqdn : Cette fonction bash permet de vérifier qu’une variable correspond à un FQDN valide.

function checkfqdn()
{
result=$(echo "$1" | grep -P '(?=^.{1,254}$)(^(?>(?!\d+\.)[a-zA-Z0-9_\-]{1,63}\.?)+(?:[a-zA-Z]{2,})$)')

if [[ -z "$result" ]]
then
echo -e "${RED} [ ERROR ]" "${NC} $1 is not a valid FQDN"
exit 0
else
echo -e "${GREEN} [ OK ]" "${NC} $1 is a valid FQDN, install in progress..."
fi
}

checkuid : Cette fonction bash permet de vérifier qu’un UID correspond à celui attendu.

function checkuid()
{
if [ "$UID" -ne "$1" ]

then
echo -e "${RED} [ ERROR ]" "${NC} you must be root to install the server"
exit 0

else
echo -e "${GREEN} [ OK ]" "${NC} UID ok, install in progress..."

fi
}

changuserpass : Cette fonction bash permet simplement de changer le mot de passe d’un utilisateur Linux.

function changeuserpass()
{
user_pass="$1"
user="$2"
echo -e "$user_pass\n$user_pass" |passwd "$user"

}

sslinstall : Cette fonction bash permet l’installation d’un certificat let’s encrypt pour un vhost. Note : un alias general vers /home/letsencrypt sur le serveur permet d’eviter des problemes de usecase client de type .htaccess ou autre.

function sslinstall()
{
admin_mail="$1"
domains="$2"
certbot -n --agree-tos --email "$admin_mail" --installer apache --webroot -w "/home/letsencrypt" --domains "$domains"
}

addmyuser : Cette fonction bash permet simplement l’ajout d’un nouvel utilisateur Linux.

function addmyuser()
{
user="$1"
directory="$2"
useradd "$user" --shell /bin/bash -g users -m -d "$directory"
}

deploy : cette fonction bash permet le téléchargement et l’installation de packages via apt.

downloader='apt -y -f --allow-unauthenticated -d install'
installer='apt -y -f --allow-unauthenticated install'

function deploy()
{
installer="$1"
packs="$2"

echo "Installing packages : $packages..."
$downloader $packs
$installer $packs
}

clean : cette fonction bash permet de vider puis d’effacer un fichier

function clean ()
{
file2clean=$1
> "$file2clean"
rm -f "$file2clean"
}

genpass : cette fonction bash permet de générer un mot de passe aléatoire en spécifiant le nombre de caractères attendus

function genpass()
{
charx="$1"
pwgen -A -B "$charx" 1
}

writefile : Cette fonction bash permet d’écrire dans un fichier avec 2 options : soit la création d’un nouveau fichier, soit le rajout de lignes dans un fichier.

writefile
 
Christophe Casalegno
​Vous pouvez me suivre sur : Twitter | Facebook | Linkedin | Telegram | Youtube

Leave a Comment