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.

#1 Le 10/04/2017, à 17:07

Hedi934

Script shell

Bonjour j'ai pour but de dessiner une ligne grace a un script point que j'ai deja fait et qui prend une coordonne x et y en argument et un caractère a mettre dans cette cordonne

mon programme donne sa

#!/bin/bash

#Met y a la bonne valeur
(($2==10-$2 ))	
#compte le nombre de ligne
for j in {1..10}
do
	#condition pour savoir quel ligne et concerné	
	if (( j == $2 ))
	then		
		#boucle pour compter le nombre de colone		
		for i in {1..20}
		do	
			echo -n "1"		
			#condition pour savoir quel colone et concerné			
			if (( i == $1-1))
			then
				echo -n "$3"
				#test si une autre incrementation inutile va s'ajouter et sors de la boucle si c'est la cas				
				if (( i == 19 ))
				then
					break
				fi
			fi
		done
	else		
		#ecrit le reste des ligne composer de 1		
		for i in {1..20}
		do
			echo -n "1"
		done
	fi

	echo
done

et me done par exemple avec ces arguement 20 10 c

11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
1111111111111111111c

mon but serait de faire un script avec comme arguement une coordonne y avec x1 et x2 et bien sur le caractère en utilisant le script point que j'ai fait ci dessu de tel sort que pour les arguement

10 20 10 c il m'affiche

11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
11111111111111111111
111111111ccccccccccc

ce que je n'arrive pas a obtenir merci de vos reponse

Hors ligne

#2 Le 10/04/2017, à 21:07

Hizoka

Re : Script shell

Salut, si tu pars sur du python3, un truc tout simple :

>>> def test(val1, nb1, val2, nb2):
...  print(val1 * nb1)
...  print(val2 * nb2)

>>> test("10", 20, "c", 10)
1010101010101010101010101010101010101010
cccccccccc

c'est juste un exemple car ça ne remplit pas exactement ta demande, mais c'est surement plus simple ainsi tongue

sinon, en bash tu peux faire un truc du genre :

x=10
for ((i=0; i<${x}; i++))
do
  echo  "$i"
done

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#3 Le 10/04/2017, à 22:17

MicP

Re : Script shell

bonsoir

car="c"
repet=10
ligne=10
colonne=20

tput cup $ligne $colonne; printf '%.s'$car $(seq $repet)

En espérant avoir bien compris quel était le but recherché.

Dernière modification par MicP (Le 10/04/2017, à 22:24)

Hors ligne

#4 Le 10/04/2017, à 23:23

Hizoka

Re : Script shell

Perso ça me renvoie un truc crados du genre :

┌─[hizoka@~]
└─>                 cccccccccc┌─[hizoka@~]
└─> izoka@~]
└─> tput cup $ligne $colonne; printf '%.s'$car $(seq $repet)

KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#5 Le 11/04/2017, à 16:56

Hedi934

Re : Script shell

Le but recherche et d'ecrire un script trait qui dessine une droite horizontale de coordonné y et allan de x1 jusqua x2 grace au script point.sh qui prend en argument x y et le caractere , ce que je n'arrive pas a obtenir directement dans le terminal ni dans un fichier d'ailleur

Hors ligne

#6 Le 13/04/2017, à 15:26

PeekLeon

Re : Script shell

Bonjour,

J'ai fais ce code :

#!/bin/bash

### CONSTRUCTION DU TABLEAU
nbCol=10
nbLigne=20
charTab="1"

### CONSTRUCTION DE LA LIGNE
x=2 #Colonne
y=5 #Ligne
charLigne="-"

echo ""
#### LIGNES
for i in `seq 1 $nbLigne`
do

	### COLONNES
	for j in `seq 1 $nbCol`
	do
		
		if [[ $i -eq $y ]]
		then
			if [[ $j -gt $x ]]
			then	
				echo -n "$charLigne"
			else
				echo -n $charTab
			fi
		else
			echo -n $charTab
		fi
		
	done
	
	echo "" #Retour à la ligne
done

En espérant avoir aidé.
Par contre ici on donne l'emplacement de la ligne sur x et y soit colonne 2 ligne 5 mais sans donner la fin de la ligne.

Hors ligne

#7 Le 13/04/2017, à 17:29

Watael

Re : Script shell

c'est bien.

#!/bin/bash

# Tableau
nbCol=10
nbLigne=20

# Déclencheurs de modification
colMod=2 # donner des noms évocateurs aux variables
ligMod=5

# Caractères
char="1"
charMod="-"

echo ""
for ((ligne=1;ligne<=nbLigne;ligne++)) #pour éviter l'appel d'une commande externe
do
    for ((col=1;col<=nbCol;col++))
    do  
            ((ligne==ligMod? col>colMod?1:0 :0)) && printf "$charMod" || printf $char
    done
    echo ""
done

Dernière modification par Watael (Le 13/04/2017, à 17:31)


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

Hors ligne

#8 Le 13/04/2017, à 17:52

Hizoka

Re : Script shell

Watael, peux tu expliquer ((ligne==ligMod? col>colMod?1:0 :0)) stp.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#9 Le 13/04/2017, à 18:44

Watael

Re : Script shell

c'est pareil que ce que PeekLeon a écrit :

si ligne EQ ligMod
alors
   si col GT colMod
   alors
      impr modif
   autre
      impr defaut
   finsi
autre
   impr defaut
finsi

((condition?vrai:faux))
j'en ai imbriqué une :((condition? (condition?vrai:faux) :faux))
dans une évaluation arithmétique, zéro est faux.

Dernière modification par Watael (Le 13/04/2017, à 18:48)


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

Hors ligne

#10 Le 13/04/2017, à 19:14

Hizoka

Re : Script shell

Merci, je ne connaissais pas du tout cette forme de condition.

moins lisible mais terriblement plus courte.

c'est étonnant cette forme où il ne faut pas utiliser le symbole $ pour les variables.
ca vient du c ? car le style ressemble à la boucle for.

Dernière modification par Hizoka (Le 13/04/2017, à 19:16)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#11 Le 13/04/2017, à 19:29

Watael

Re : Script shell

entre les doubles parenthèses, c'est une évaluation arithmétique (ça ne sert pas que dans une boucle for), où les $ sont facultatifs.

je ne sais pas d'où ça vient. du C, en passant par KSH ?


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

Hors ligne

#12 Le 13/04/2017, à 20:51

PeekLeon

Re : Script shell

C'est beaucoup plus élégant cette façon de faire Watael, je prend wink

Hors ligne

#13 Le 14/04/2017, à 16:07

MicP

Re : Script shell

[hors sujet]

Watael a écrit :

…je ne sais pas d'où ça vient. du C, en passant par KSH ?…

Ça ressemble à la syntaxe d'un test conditionnel en C :

(condition) ? instruction si vrai : instruction si faux

Mais quand je t'avais vu l'utiliser dans le 'format' d'un printf d'awk j'ai été "scié"

https://forum.ubuntu-fr.org/viewtopic.p … #p21669658

…
            fmt = i==n?"%s":"%s "
            gsub("[^:]*:","",ar[i])
            printf(fmt, ar[i])
…

Faut dire qu'en tant qu'autodidacte, j'ai énormément de choses à apprendre encore.
[/hors sujet]

Dernière modification par MicP (Le 14/04/2017, à 20:37)

Hors ligne