Contenu | Rechercher | Menus

Annonce

Ubuntu 16.04 LTS
Commandez vos DVD et clés USB Ubuntu-fr !

Pour en savoir un peu plus sur l'équipe du forum.

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.

#1 Le 14/08/2017, à 13:44

kholo

[TUTO Bash] les trucs à Kiki

bonjour à tous,
Un peu comme cuisiner demande de savoir des bases ;
je vais tenter de centraliser ici les trucs et astuces, les canevas de code, les choses répétitives à connaître en bash...
bonne lecture !
----------------------------------------------------------
pour une aide d'une fonction, dans un terminal, tapez :
man bash
[fonction] --help
[fonction] -help
[fonction] -h
quoi que j'écrive cela a sûrement été évoqué et mieux expliqué sur une de ses pages :
une réponse dans un post pour faire son premier Bonjour Monde
https://doc.ubuntu-fr.org/tutoriel/script_shell
https://doc.ubuntu-fr.org/wiki/glossaire
https://doc.ubuntu-fr.org/bash
https://abs.traduc.org/abs-fr/
http://aral.iut-rodez.fr/fr/sanchis/ens … index.html
http://mywiki.wooledge.org/BashGuide
http://wiki.bash-hackers.org/
http://wiki.bash-hackers.org/scripting/obsolete
http://www.c-sait.net/cours/bash.php
https://www.gnu.org/software/bash/manua … index.html
http://www.abrillant.com/doc/linux/index.html
http://www.tldp.org/LDP/abs/html/index.html
https://linoxide.com/linux-how-to/lesse … al-tricks/

pour vérifier du code :
http://www.shellcheck.net/
----------------------------------------------------------
Index

  • Les Variables

  • Afficher du texte sans s’embêter avec les quottes

  • Les Calculs

  • Les Variables en tableau

  • version simple

  • Des listes et des fichiers dans des tableaux

  • version plus complète

  • journaliser 1

  • journaliser 2

  • un splashscreen

  • gestion des fichier ini / conf

  • Les Conditions

  • Les pipes

  • Trim / FIFO

  • être sudoer

  • Les infos glanées sur ce fil

AJOUTS :
[tuto bash] changement valeurs dans un fichier texte

----------------------------------------------------------
Les Variables
sortir une partie d'une variable :

maVariable="un texte avec égale (=) en séparateur=des choses et d'autres"
echo "${maVariable}
${maVariable##*=}		; après le dernier =
${maVariable#*=}		; après le premier =
${maVariable%%=*}		; avant le premier =
${maVariable%=*}		; avant le dernier =
"
maVariable="PLEINS de mots eT dEs acCents âéèàç, espacEs... et des espaces à la fin"
echo "
${maVariable:0:3}		; 3 premiers caractères
${maVariable: -3:3}		; 3 dernier caractères
${maVariable: 10:3}		; 3 caractères depuis la 10 ème lettre
${maVariable: -10:3}		; 3 caractères depuis la 10 ème lettre depuis la fin
"
maVariable="PLEINS de mots eT dEs acCents âéèàç, espacEs... et des espaces à la fin     "
echo "letexte est :
$maVariable
il fait ${#maVariable} caractères
---------------------------------------"
echo "Convertir espaces en underscore :
${maVariable//\ /_}
tout en minuscules
${maVariable,,}
tout en majuscules
${maVariable^^}
inverser minuscules et majuscules
${maVariable~~}"
supprimerLeDernierCaractere {
	local ligne="$@"
	echo "${ligne:0:(( ${#ligne} - 1 ))}"
}

Afficher du texte sans s’embêter avec les quottes
Afficher une aide avec des caractères qui pourraient emmêler le code

afficher_aide () {
cat <<EOF 
plein de texte ici avec des quottes ' et des doubles quottent "
qui ne seront pas considérées dans le code
EOF
	}
afficher_aide

autre exemple envoyer du texte pour créer un script externe :

cat <<EOF > "$PWD/test"
#!/bin/bash
echo "bonjour monde"
echo "appuyer sur entrée pour continuer"
read r
EOF
chmod +x "$PWD/test"

Les Calculs
la syntaxe de bash ((X+Y))
((123+456))
((123*456))
...

function sqrt() { echo -e "sqrt($1)" | bc -q -i; }
bc -l <<<"(sqrt(5))"
awk 'BEGIN { print 5.5+1.257; print sqrt(9); print (1-3)*2.5-sqrt(25); print 2**4,2^4,sqrt(2^4)}'
read -p "entrez un chiffre,nombre ?" nb; awk -v input="$nb" 'BEGIN {print sqrt(input)}'

avec apcalc
installation

sudo apt-get install apcalc

exemple

calc -p -- "(sqrt(5))"

Les Variables en tableau
quand on a du texte séparé par un ou plusieurs séparateurs, on a besoin de récupérer individuellement une ou des valeurs... comment se passer du cut :
version simple
Des listes et des fichiers dans des tableaux

#!/bin/bash
# ***********************************************************
echo "exemple 1
# prenons un fichier"
echo "une ligne
une autre ligne
une troisième
et de cat
miaou" > unFichier.txt 

echo "# on va lire le fichier et mettre chaque ligne dans un index d'une variable"

IFS=$'\n' une_liste=( $(cat unFichier.txt) )
echo "
# on sort les éléments un à un"
for uneLigne in ${une_liste[@]}
do
	echo "${uneLigne}"
done

# ***********************************************************
echo ""
echo "exemple 2
# la même chose avec une liste directement"
une_liste="une ligne
une autre ligne
une troisième
et de cat
miaou"

IFS=$'\n' une_liste=( ${une_liste} )
echo "# on sort les éléments un à un"
for uneLigne in ${une_liste[@]}
do
	echo "${uneLigne}"
done

version plus complète

#!/bin/bash

declare -a couleurs
#  Toutes les commandes suivantes dans ce script traiteront
#+ la variable "couleurs" comme un tableau.

echo "rouge vert bleu noir blanc"
echo "Entrez vos couleurs favorites (séparées par une espace)."

read -a couleurs  #  Entrez au moins trois couleurs pour démontrer les
                  #+ fonctionnalités ci-dessous.
#  Option spéciale pour la commande 'read'
#+ permettant d'affecter les éléments dans un tableau.

echo

nb_element=${#couleurs[@]}
# Syntaxe spéciale pour extraire le nombre d'éléments d'un tableau.
#     nb_element=${#couleurs[*]} fonctionne aussi.
#
#  La variable "@" permet de diviser les mots compris dans des guillemets
#+ (extrait les variables séparées par des espaces blancs).
#
#  Ceci correspond au comportement de "$@" et "$*"
#+ dans les paramètres de positionnement.

index=0

while [ "$index" -lt "$nb_element" ]
do    # Liste tous les éléments du tableau.
  echo ${couleurs[$index]}
  let "index = $index + 1"
  # ou index+=1 avec Bash 3.1 et suivants
done
# Chaque élément du tableau est listé sur une ligne séparée.
# Si ceci n'est pas souhaité, utilisez echo -n "${couleurs[$index]} "
#
echo 'Pour le faire avec une boucle "for":'
for i in "${couleurs[@]}"
do
     echo "$i"
done

echo

#  Encore une fois, liste tous les éléments d'un tableau, mais en utilisant une
#+ méthode plus élégante.
  echo ${couleurs[@]}        # echo ${couleurs[*]} fonctionne aussi.

echo

# La commande "unset" supprime les éléments d'un tableau ou un tableau entier.
unset couleurs[1]            # Supprime le deuxième élément d'un tableau.
                             # Même effet que   couleurs[1]=
echo  ${couleurs[@]}         # Encore un tableau liste, dont le deuxième
                             # élément est manquant.

unset couleurs               # Supprime le tableau entier.
                             #  unset couleurs[*] et
                             #+ unset couleurs[@] fonctionnent aussi.
echo; echo -n "couleurs parties."
echo ${couleurs[@]}          #  Affiche le tableau une nouvelle fois, maintenant
                             #+ vide.

journaliser 1

_journal {
	nomlogiciel="${0##*/}"
	fichier_log="$nomlogiciel.log"
	> "$fichier_log"
}
echo "ouverture du journal"
_journal

journal {
	echo "$@" >> "$fichier_log"
}

journaliser 2

#durée d'exécution pour horodatage du log
START=$(date +%s.%N)
#ETAGE JOURNAL
_journal () {
	nomlogiciel="${0##*/}"
	fichier_log="$nomlogiciel.log"
	#on vide le log ou on le crée si il n'existe pas
	> "${fichier_log}"
	journal "ouverture - $(date)"
	journal "Ligne ${LINENO}--\t\t------------------------"
	}
journal () {
	local NOW=$(date +%s.%N)
	local DIFF=$(echo "${NOW} - ${START}" | bc)
	echo -e "[${DIFF}] ${@}" >> "${fichier_log}"
	#echo -e "${@}" >> "${fichier_log}"
	}
_journal

un splashscreen

splashScreen () {
(echo "<h1>PIL v$VERSION</h1><img src=\"data:"
 mimetype -b "$1"
 echo -n ";base64,"
 base64 "$1"
 echo "\">" ;) | zenity --text-info --timeout=2 --width=400 --height=500 --ok-label="Go" --cancel-label="" --html --filename=/dev/stdin
}
splashScreen "${chemin_Image}}" >/dev/null ;

gestion des fichier ini / conf

_iniFile () {
	journal "appel de : ${FUNCNAME} ${@}"
	if [ -f "${fichierIni}" ]; then
		chargerIni ;
	else
		journal "création fichier ini"
		touch "${fichierIni}" ;
		sauverIni ;
	fi 
	journal "sortie ${FUNCNAME} : $?"
	}
chargerIni () {
	journal "appel de : ${FUNCNAME} ${@}"
	while read line ;
	do
		parserLigneIni "$line" ;
	done < "${fichierIni}" ;

	if [ ! -d "$chemin_Du_Prog" ] ; 
	then 
		localisation ;
		journal "Erreur de chemin - fichier ini ré-initialisé" ;
		sauverIni ;
	fi
	journal "sortie ${FUNCNAME} : $?"
	}
sauverIni () {
journal "appel de : ${FUNCNAME} ${@}"
echo "chemin_du_prog=${chemin_du_prog}
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 "${fichierIni}" >/dev/null ;
	journal "sortie ${FUNCNAME} : $?"
	}
parserLigneIni () {
	journal "appel de : ${FUNCNAME} ${@}"
	i=${@} ;
	case $i in
		#~xxxxx=*)				xxxxxx="${i#*=}" ;;
		chemin_du_prog=*)		chemin_du_prog="${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 ;

Les Conditions
tester une ou plusieurs conditions
if [ $? -ne 0 ] ; then echo "OUI" ; else echo "NON" ; fi ;
ou plutôt

if [ $? -ne 0 ]
then 
	echo "OUI"
else 
	echo "NON" 
fi
[ $? -eq 0 ] && echo "OUI" || echo "NON";
[[ $? -eq 0 ]] && echo "OUI" || echo "NON";

[Résolu] Différence entre "[ un test ]" et "[[ un test ]]" ???
réponses ici et ici sur le même fil

on a surtout besoin de tableaux qui reprennent les types de test
et surtout

man test

big_smile wink cool (là si on ne le voit pas... Ah si MAN TEST)

Les pipes
Les pipes permettent de router un flux vers une prochaine fonction

echo "Convertir espaces en underscore :"
echo $maVariable | tr " " "_"
echo "Passer tout en minuscules"
echo $maVariable | tr [:upper:] [:lower:]
echo "Retablir les esapces"
echo $maVariable | tr "_" " "

Trim
on peut souhaiter appliquer des actions à la fin du script
TRIM permet d’intercepter des demandes
https://www.jujens.eu/posts/2015/Jan/09 … trap-bash/

# Par exemple :
# trap "echo yollo" 2 3
# affichera yollo quand on fait Ctrl-C.
# 
# On obtient la liste des signaux avec leurs numéros et leurs noms avec la commande kill.

# kill -l
# 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
# 5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
# 9)SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
# 
# A priori, il est possible d'utiliser le nom du signal 
# plutôt que le numéro avec trap

function callTerm () {
	echo "function callTerm"
	exit 3
	}

function callUsr1 () {
	echo "function callUsr1"
	}

pid=$$
echo "pid = $pid
# une fois le script démarré, 
# lancer un signal depuis un second terminal qui mettra fin à celui ci :
# SIGTERM version 1
# $ kill -TERM numero_pid
kill -TERM $pid

# SIGTERM version 2
# $ kill numero_pid
kill $pid

# SIGUSR1
# $ kill -USR1 numero_pid
kill -USR1 $pid
"
sleep 5
x-terminal-emulator &
clear

trap callTerm TERM # callTerm est une fonction à déclarer en début de scrit
trap callUsr1 USR1 # callUsr1 est également une fonction

echo "Lancer une des fonctions depuis le second terminal
kill -USR1 $pid
puis
kill $pid
ou
kill -TERM $pid
ou
Appuyer sur Entrée pour continuer..."
read r

pour des valeurs temporaires FIFO

PID=$$
FIFO=/tmp/FIFO${PID}
mkfifo ${FIFO}
trap "rm -f ${FIFO}" EXIT

être sudoer
certains scripts doivent être exécutés par un sudoer
2 façon de faire : soit le script quitte en réclamant un sudo, soit le script se relance lui même avec le sudo...
je met ici un exemple pour la seconde éventualité :

echo "ROOT OBLIGATOIRE"
if [ "$UID" -ne "0" ]
then
	echo "Vous devez être en mode SU pour pouvoir utilisé ce sript"
	sleep 1 
	echo "Entrer le mot de passe root, je relance la commande $NOM_LOGICIEL"
	sudo ./"$NOM_LOGICIEL"
	exit 1
fi

function _main {
zenity --info --text="ne peut se lancer qu'en sudoer"
}
_main

NB : if [ "$UID" -ne "0" ] est une façon de tester les droits de l'utilisateur

on peut aussi tester l'appartenance de l'utilisateur au groupe de sudo (en plus de l'autre test)

groups | grep sudo

donnera :

estSudoer=$(groups | grep sudo)
if [ "$estSudoer" > 1 ] 
then 
	echo "$USER est sudoer"
else
	echo "$USER n'est pas sudoer"
fi

Les infos glanées sur ce fil :

Watael a écrit :

bash sait afficher les dates, et assigner des variables avec printf.
les noms de variables tout en majuscules sont réservés aux variables d'environnement, pas à celles des utilisateurs.

Sub0 a écrit :

Pourquoi se priver de [[ … ]], qui n’a que des avantages ?
Le exit 0 à la fin des scripts est tout à fait inutile. Si le script arrive là, $? sera égal à 0 de toutes manières.
Toujours utiliser read avec l’option -r, sauf volonté explicitement contraire.

nam1962 a écrit :

Tiens, un petit lien avec quelques astuces utiles : [lien ajouté au début du post]
En particulier !! qui reprend une commande ou on a oublié le sudo :

 ~]$ X -version
/usr/lib/xorg-server/Xorg.wrap: Only console users are allowed to run the X server
[moi-meme@ordi2 ~]$ sudo !!
sudo X -version
[sudo] Mot de passe de moi-meme : 

Et at qui permet de fixer un délai, une heure ou une date d'exécution de la commande --> http://www.thegeekstuff.com/2010/06/at- … d-examples

J'aime aussi les astuces comme ctrl - a pour revenir en début de ligne, ctrl - e pour aller en fin de ligne, ctrl - l pour effacer le contenu de la console...

Watael a écrit :

man bash ne traite que de [[

parce [ est un alias de test.
je recommande également l'emploi de test, plutôt que [.
test a l'avantage de bien montrer qu'il est question d'une commande, et pas d'un groupement d'évaluations (j'ai souvent vu [ être confondu avec des parenthèses; et avec des parenthèses, un test, « bah, forcément, ça va beaucoup moins bien marcher ! »).

... je reviendrai ! lol

Dernière modification par kholo (Le 11/09/2017, à 12:11)

Hors ligne

#2 Le 14/08/2017, à 13:57

Watael

Re : [TUTO Bash] les trucs à Kiki

salut,

echo "Convertir espaces en underscore :"
echo "${maVariable// /_}"
echo "Passer tout en minuscules"
echo "${maVariable,,}"
echo "Retablir les esapces"
echo "${maVariable//_/ }"

bash sait afficher les dates, et assigner des variables avec printf.
les noms de variables tout en majuscules sont réservés aux variables d'environnement, pas à celles des utilisateurs.
zenity n'est pas bash.
on peut se dispenser de ls
d'ailleurs, que crois-tu que fait l'option -w 1 ?

Dernière modification par Watael (Le 14/08/2017, à 14:10)


eval, c'est mal.

Hors ligne

#3 Le 14/08/2017, à 15:32

Sub0

Re : [TUTO Bash] les trucs à Kiki

S’il s’agit de bash, quelques p'tits trucs.

function name () {} = syntaxe obsolète, à remplacer par name () {}
http://wiki.bash-hackers.org/scripting/obsolete

Pourquoi se priver de [[ … ]], qui n’a que des avantages ?

Sans pipe ni tr

var="PLEINS de mots eT dEs acCents âéèàç, espacEs... et des espaces à la fin     "
echo "${var//\ /_}"
echo "${var,,}"
echo "${var^^}"
echo "${var~~}"

Le exit 0 à la fin des scripts est tout à fait inutile. Si le script arrive là, $? sera égal à 0 de toutes manières.

Toujours utiliser read avec l’option -r, sauf volonté explicitement contraire.

Dernière modification par Sub0 (Le 14/08/2017, à 15:45)


Seule alternative au bépo acceptée = stylo/papier.

Hors ligne

#4 Le 14/08/2017, à 16:26

Anonyme68

Re : [TUTO Bash] les trucs à Kiki

on va finir par avoir tout le manuel de bash ? smile

les ";" à la fin de la ligne sont également inutiles

les accolades sont totalement inutiles si tu fais que afficher les variables (ou constates d'ailleurs), ça rends le code moins lisible

exemple :

"${CHEMIN_DES_IMAGES}/${IMG_SPLASH}"

846/2381 jeux linux sur Steam

Vous avez plein d'ISO d'ubuntu ? Une bonne bande passante ? Aimer partager ? Essayer mon script

Hors ligne

#5 Le 14/08/2017, à 16:59

kholo

Re : [TUTO Bash] les trucs à Kiki

merci à tous les deux trois de participer... j'en attendais pas moins wink

j'ai repris vos propositions et ai commencé à corriger et ajouter...
ça m'a donné des idées

@Watael
zenity n'est pas bash. # supprimé, je ferai un spécial zenity...
on peut se dispenser de ls
je prends souvent ls dans les explications
car c'est la première fonction apprise en venant du batch (et à désapprendre la fonction dir !)
je vais prendre un autre exemple
et je ferais un point pour la navigation dans les dossiers, fichiers et liens
... surtout pour la sélection des navigateurs de fichiers vers bash !

d'ailleurs, que crois-tu que fait l'option -w 1 ?
ls -w 1 = ls -1 ?
Naaan, j'déconne... mais j'ai cru...
je ne connaissais pas alors j'ai maté la doc et fais des essais
ça adapte la sortie pour émuler une largeur (j'ai laissé traîner un de mes read r pour mettre en plein écran ? big_smile )

@Sub0
Toujours utiliser read avec l’option -r, sauf volonté explicitement contraire.
read : utilisation : read [-ers] [-a tableau] [-d delim] [-i texte] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [nom ...]

@Anonyme68
j'espère arriver à écrémer et laisser surtout des howto pour des actions redondantes ; le journal, la conf (lecture / écriture), utilisation /tmp, FIFO, fermeture et TRIM...

Dernière modification par kholo (Le 14/08/2017, à 16:59)

Hors ligne

#6 Le 14/08/2017, à 17:24

Watael

Re : [TUTO Bash] les trucs à Kiki

émuler une largeur, mais une largeur d'un caractère... hmm est-ce bien utile ? quel effet cela peut-il bien avoir ?
je ne vois pas de différence entre ls -w 1 et ls -1.
pour obtenir un affichage différent, il faut que je mette comme valeur un nombre supérieur à deux fois le nombre de caractères du plus long nom de fichier du répertoire.


eval, c'est mal.

Hors ligne

#7 Le 14/08/2017, à 17:44

nam1962

Re : [TUTO Bash] les trucs à Kiki

Je suis le fil smile


Almanet doLys de l'open source : mon tuto pour optimiser / finaliser une install
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing Et vous ?
57 convertis  IRL (n'ont pas eu le choix...).
Un jeune site que j'aime bien, le top du T-shirt homme ...bio et éthique en plus : https://goudronblanc.com

Hors ligne

#8 Le 14/08/2017, à 17:45

kholo

Re : [TUTO Bash] les trucs à Kiki

oui j'avais fait des tests avec ls -w 1, 3, 5, 50, 80
on voit les différences quand on augmente la valeur...
ls -1 affiche "bêtement" le nom de chaque élément

Dernière modification par kholo (Le 14/08/2017, à 17:48)

Hors ligne

#9 Le 14/08/2017, à 17:46

kholo

Re : [TUTO Bash] les trucs à Kiki

@nam1962 : viens plutôt jouer avec nous !!!
t'es un passif ? lol

Hors ligne

#10 Le 14/08/2017, à 21:52

Anonyme68

Re : [TUTO Bash] les trucs à Kiki

Tu as mis pas mal lien, mais il manque quand même le lien ultime

man bash

Très bien documenté et complet, je pense qu'il faut le mettre en avant parce que toutes les spécifications (appelé astuces ici) y sont expliquées.

Tu as fait une catégorie calcul sans faire référence que bash sait faire des calculs également. ((X+Y))

Au final tout ce qui se trouve dans le manuel peut être une "astuce" pour une personne qui ne pas lu...

les fonctions de ton post sont sympa et peuvent permettre de gagner du temps, les autres peuvent servir d'aide-memoire ...

Dernière modification par Anonyme68 (Le 14/08/2017, à 21:52)


846/2381 jeux linux sur Steam

Vous avez plein d'ISO d'ubuntu ? Une bonne bande passante ? Aimer partager ? Essayer mon script

Hors ligne

#11 Le 14/08/2017, à 22:59

Watael

Re : [TUTO Bash] les trucs à Kiki

kholo a écrit :

oui j'avais fait des tests avec ls -w 1, 3, 5, 50, 80
on voit les différences quand on augmente la valeur...
ls -1 affiche "bêtement" le nom de chaque élément

donc, finalement, ls -w1 = ls -1, ou printf '%s\n' *.

Sub0 a écrit :

Pourquoi se priver de [[ … ]], qui n’a que des avantages ?

plutôt que ?
si on n'a pas besoin de ses fonctionnalités (hormis de pouvoir ne pas mettre de guillemets, ce qui pour un débutant peut être perturbant, quand on lui serine qu'il faut toujours mettre les variables entre guillemets), pourquoi le dégainer ?


eval, c'est mal.

Hors ligne

#12 Le 15/08/2017, à 10:14

Sub0

Re : [TUTO Bash] les trucs à Kiki

Watael a écrit :
Sub0 a écrit :

Pourquoi se priver de [[ … ]], qui n’a que des avantages ?

plutôt que ?
si on n'a pas besoin de ses fonctionnalités (hormis de pouvoir ne pas mettre de guillemets, ce qui pour un débutant peut être perturbant, quand on lui serine qu'il faut toujours mettre les variables entre guillemets), pourquoi le dégainer ?

C’est un avis qu’on croise rarement, mais pourquoi pas wink
J’ai tendance à penser l’inverse. En dehors de la question de la portabilité, la syntaxe de [[ est plus simple et pardonne mieux les erreurs.
Dans ce cas, pourquoi se priver de &&/||, ==, =~, etc. ?
Bon, de toutes manières, on croise couramment les deux, et faut connaître les deux, mais sauf erreur de ma part, man bash ne traite que de [[


Seule alternative au bépo acceptée = stylo/papier.

Hors ligne

#13 Le 15/08/2017, à 10:24

kholo

Re : [TUTO Bash] les trucs à Kiki

bon, j'ai voulu condenser pour ceux qui ne sont pas débutants comme moi et qui ont plus de mal à suivre une doc qu'un tuto avec exemple...
par exemple, j'ai mis du temps pour la journalisation, l'horodatage,...
voilà qui est fait !

les  [[ … ]] sont bien déstabilisant d'où mon lien vers le post de Postmortem !

pour
ls -w1 = ls -1, ou printf '%s\n' *
je pense qu'il faut une partie sur la lecture du contenu de dossiers,
et on pourra y venir
puis les tests "est un lien", "est un dossier", "est un fichier", "existe",...
et le lien avec les gestionnaires de fichier
j'ai des routines avec Nautilus
...je potasse encore dessus mais ça viendra rapidement...
(si un autre veut s'y coller, j'ajouterai au premier post big_smile )

Hors ligne

#14 Le 15/08/2017, à 10:59

nam1962

Re : [TUTO Bash] les trucs à Kiki

Tiens, un petit lien avec quelques astuces utiles : https://linoxide.com/linux-how-to/lesse … al-tricks/
En particulier !! qui reprend une commande ou on a oublié le sudo :

 ~]$ X -version
/usr/lib/xorg-server/Xorg.wrap: Only console users are allowed to run the X server
[moi-meme@ordi2 ~]$ sudo !!
sudo X -version
[sudo] Mot de passe de moi-meme : 

Et at qui permet de fixer un délai, une heure ou une date d'exécution de la commande --> http://www.thegeekstuff.com/2010/06/at- … d-examples

J'aime aussi les astuces comme ctrl - a pour revenir en début de ligne, ctrl - e pour aller en fin de ligne, ctrl - l pour effacer le contenu de la console...


Almanet doLys de l'open source : mon tuto pour optimiser / finaliser une install
Xubuntu devel - Manjaro unstable - OpenSUSE tumbleweed (GeckoLinux) -Debian Testing Et vous ?
57 convertis  IRL (n'ont pas eu le choix...).
Un jeune site que j'aime bien, le top du T-shirt homme ...bio et éthique en plus : https://goudronblanc.com

Hors ligne

#15 Le 15/08/2017, à 16:46

Watael

Re : [TUTO Bash] les trucs à Kiki

man bash ne traite que de [[

parce [ est un alias de test.
je recommande également l'emploi de test, plutôt que [.
test a l'avantage de bien montrer qu'il est question d'une commande, et pas d'un groupement d'évaluations (j'ai souvent vu [ être confondu avec des parenthèses; et avec des parenthèses, un test, « bah, forcément, ça va beaucoup moins bien marcher ! »).


eval, c'est mal.

Hors ligne

#16 Le 11/09/2017, à 12:12

kholo

Re : [TUTO Bash] les trucs à Kiki

bonjour,
un niveau AJOUT pour mettre des liens supplémentaires...
ajout du jour :  [tuto bash] changement valeurs dans un fichier texte

Hors ligne