Linux underground |
Ne pas oublier de vérifier que le fichier script à
l'attribut "exécution" (chmod +x nomfich.sh) et toujours commencer le script par :
#!/bin/bash
# Description de ce que fait le script
et l'exécuter par ./nomfich.sh
A noter que si toutes les commandes se trouvent sur une ligne, séparées par ";", on peut les encoder en ligne de commande.
#!/bin/sh
if [ `uname -r` == "4.14.100" ]
then
<liste de commandes>
else
<liste de commandes>
endif
#!/bin/sh
print()
{
for FILE in *; do
echo "${FILE}"
done
}
LIST="file01 file02 file03 file04"
print "${LIST}"
L'argument $0 affiche la totalité de la ligne :
$ echo part1 part2 part3 part4 | awk '{print $0}'
Affichera part1 part2 part3 part4
$ echo part1 part2 part3 part4 | awk '{print $2}'
Affichera part2
Faisons la même chose mais avec un séparateur choisi par l'utilisateur.
Remarquez les "" et le caractère d'échappement (\) lorsqu'il
s'agit d'un caractère réservé:
$ echo part1,part2,part3,part4 | awk -F, '{print $2}'
$ echo "part1;part2;part3;part4" | awk -F\; '{print $2}'
Un exemple concret où on affiche uniquement les noms d'utilisateurs
du fichier /etc/passwd :
$ awk -F: '{print $1}' /etc/passwd
$ for N in *; do mv ${N} `echo ${N} | tr '[:upper:]' '[:lower:]'`; done
$ du -sk /home/* | sort -n
Donnera la liste de tous les répertoires de /home/ triés
par taille, du plus petit au plus gros. Remarquez que s'il y avait d'autres
types de fichiers que des répertoires, ceux-ci seraient
également listés.
$ mv mon_fichier mon_fichier_`date +%Y-%m-%d`
$ mv mon_fichier mon_fichier_`date +%Y-%m-%dT%H:%M:%S`
Pour faire tous les fichiers d'un répertoire :
#!/bin/sh
NOW=`date +%Y-%m-%d`
for FILE in *; do
mv "${FILE}" "${FILE}_${NOW}"
done
Dans l'exemple ci-dessous, on va remplacer l'extension des fichiers par une autres
$ for FILE in *txt; do echo "${FILE}" "${FILE%*txt}bak"; done
$ for FILE in *wav; do echo "${FILE}" "${FILE%*wav}mp3"; done
Ce qui se trouve après "*" est coupé. Remplacez echo par la commande que
vous souhaitez (cp, mv, convert, …).
Cet exemple-ci fait quelque chose de semblable à celui ci-dessus :
#!/bin/sh
for fichier in *.JPG
do
minus=`echo "${fichier}" | sed -e 's/JPG$/jpg/'`
mv "${fichier}" "${minus}"
done
Mais l'utilisation de sed permet de remplacer n'importe quel morceau
déterminé de la chaîne de caractères.
#!/bin/sh
for fichier in DSC*.jpg
do
modi=`echo "${fichier}" | sed -e 's/DSC\(.*\)\.jpg/Photo \1.jpg/'`
mv "${fichier}" "${modi}"
done
Dans sed, \1 est remplacé par ce qui est entre \( et \).
$ CPT=1; for FILE in *; do mv "${FILE}" "préfixe_${CPT}.jpg"; ((CPT+=1)); done
Un simple
$ ifconfig
vous permettra de connaître le nom de votre interface réseau.
Chez moi, c'est enp0s10.
IP_PRIV4="`ifconfig enp0s10 | grep 'inet ' | awk '{print $2}'`"
IP_PRIV6="`ifconfig enp0s10 | grep 'inet6 fe80' | awk '{print $2}'`"
IP_PUBLIC=$(/usr/bin/wget -q https://www.monip.org/ -O- \
| /bin/grep 'IP :' | /usr/bin/cut --characters=-80 \
| /bin/sed -e 's/^.* \(\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*$/\1/')