Exercice en shell
Résolu
yacine
-
makoko Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
makoko Messages postés 53 Date d'inscription Statut Membre Dernière intervention -
l'exo en script bash consiste à lire à partir d'un argument $1 qui sera le fichier , et à en déduire les permissions du propriétaire du groupe et des autres (o)de telle sorte avec en sortie par exemple cette forme là :
read write execute
user moi oui oui oui
group le groupe oui non non
others les autres oui non non
je débute alors j'ai du mal , voici ce que j'ai fait pour la partie la plus importante du script
!#/bin/bash
i=2 ( i compteur )
while ($i -lt 9 ) ( on part de 2 car le 1 er caractere sera le type ex -rwxrw-r--)
if ( cut -c$i | ls -l $1 == [a-z]
echo"oui"
else
echo "non"
fi
i=i+1
done
merci pour votre aide
read write execute
user moi oui oui oui
group le groupe oui non non
others les autres oui non non
je débute alors j'ai du mal , voici ce que j'ai fait pour la partie la plus importante du script
!#/bin/bash
i=2 ( i compteur )
while ($i -lt 9 ) ( on part de 2 car le 1 er caractere sera le type ex -rwxrw-r--)
if ( cut -c$i | ls -l $1 == [a-z]
echo"oui"
else
echo "non"
fi
i=i+1
done
merci pour votre aide
A voir également:
- Exercice en shell
- Classic shell - Télécharger - Personnalisation
- Secure shell - Télécharger - Divers Web & Internet
- Shell startup windows 10 - Guide
- Shell infrastructure host c'est quoi - Guide
- Efi shell version 2.31 - Forum Programmation
48 réponses
salut!
Mais je le voudrais sans, sed et awk!
Peux-tu donner un coup de main ?
j'essaye de comprendre, ceux des scripts que toi et jipi,ont proposé, pour tenter de les modifier.
merci tout de même
a+
Mais je le voudrais sans, sed et awk!
Peux-tu donner un coup de main ?
j'essaye de comprendre, ceux des scripts que toi et jipi,ont proposé, pour tenter de les modifier.
merci tout de même
a+
salut!
alors, je pense que c'est quelque comme cela en effet,mais pour le moment, voici que ce j'obtiens : dernier script:
for i in $(who | cut -d" " -f1 | uniq);do echo -e "$i\n";ps U $i;done
------------------------------------
toi
PID TTY STAT TIME COMMAND
14926 ? S 0:00 sshd: toi@pts/2
14927 pts/2 Ss+ 0:00 -bash
moi
PID TTY STAT TIME COMMAND
14956 ? S 0:00 sshd: moi@pts/3
14957 pts/3 Ss 0:00 -bash
15080 pts/3 S+ 0:00 sh jou
15086 pts/3 R+ 0:00 ps U moi
OBSERVATION :
J'aurais voulu, uniquement mes applis (CMD), sans mon login (moi), mais avec mon nom réel affiché en haut, à le place de moi ou toi.
MODIFICATION : Serait-il possible de descendre le nom réel deux lignes en dessus, pour que l'affichage ressemble à cela:
nono
PID TTY TIME CMD
31799 pts/3 00:00:00 vim
31866 pts/3 00:00:00 vim
2495 pts/7 00:00:00 vim
8368 pts/0 00:00:00 vim
9544 pts/2 00:00:00 ps
j'avais essayé ceci avant : echo -e " $USER\n"; ps # évidemment, je n'avais pas mis WHO, donc il n'y avait que, moi.
moi
PID TTY TIME CMD
9339 pts/1 00:00:00 bash
9966 pts/1 00:00:00 ps
dans le lien que tu m'a envoyé, j'ai essayé de modifier ton script, voici ce que j'obtiens:
ps -o pid,tty,time,comm -U lami20j > echo $USER; ps -o pid, tty, time, comm # > : pour 'modifier en'
résultat:
moi
PID TT TIME COMMAND
14957 pts/3 00:00:00 bash
15125 pts/3 00:00:00 ps
REM. : c'est déjà mieux pour la structure de présentation (moi,juste au dessus), mais problèmes :
1. moi, nom de login
2. pourquoi il affiche TT et non TTY
3. si on pouvait aligner PID à gauche sans décaler trop les autres headers, ce serait bien.
merci pour ton aide
la recherche continue
a+
alors, je pense que c'est quelque comme cela en effet,mais pour le moment, voici que ce j'obtiens : dernier script:
for i in $(who | cut -d" " -f1 | uniq);do echo -e "$i\n";ps U $i;done
------------------------------------
toi
PID TTY STAT TIME COMMAND
14926 ? S 0:00 sshd: toi@pts/2
14927 pts/2 Ss+ 0:00 -bash
moi
PID TTY STAT TIME COMMAND
14956 ? S 0:00 sshd: moi@pts/3
14957 pts/3 Ss 0:00 -bash
15080 pts/3 S+ 0:00 sh jou
15086 pts/3 R+ 0:00 ps U moi
OBSERVATION :
J'aurais voulu, uniquement mes applis (CMD), sans mon login (moi), mais avec mon nom réel affiché en haut, à le place de moi ou toi.
MODIFICATION : Serait-il possible de descendre le nom réel deux lignes en dessus, pour que l'affichage ressemble à cela:
nono
PID TTY TIME CMD
31799 pts/3 00:00:00 vim
31866 pts/3 00:00:00 vim
2495 pts/7 00:00:00 vim
8368 pts/0 00:00:00 vim
9544 pts/2 00:00:00 ps
j'avais essayé ceci avant : echo -e " $USER\n"; ps # évidemment, je n'avais pas mis WHO, donc il n'y avait que, moi.
moi
PID TTY TIME CMD
9339 pts/1 00:00:00 bash
9966 pts/1 00:00:00 ps
dans le lien que tu m'a envoyé, j'ai essayé de modifier ton script, voici ce que j'obtiens:
ps -o pid,tty,time,comm -U lami20j > echo $USER; ps -o pid, tty, time, comm # > : pour 'modifier en'
résultat:
moi
PID TT TIME COMMAND
14957 pts/3 00:00:00 bash
15125 pts/3 00:00:00 ps
REM. : c'est déjà mieux pour la structure de présentation (moi,juste au dessus), mais problèmes :
1. moi, nom de login
2. pourquoi il affiche TT et non TTY
3. si on pouvait aligner PID à gauche sans décaler trop les autres headers, ce serait bien.
merci pour ton aide
la recherche continue
a+
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
si j'enlève dans ce script :
for i in $(who | cut -d" " -f1 | uniq);do echo -e "$i\n";ps U $i;done , le saut ligne, moi, descend :ok
cependant, j'ai toujours, bien sûr :
1.mon login
2.STAT
3. mon login (dernière au moins: U moi), mais je ne l'ai pas pour toi, juste son login, à la 2è ligne
Question : est-ce normal, d'avoir plus que la CMD?
a) 2è ligne pour moi
b ) 2è ligne pour toi
moi
PID TTY STAT TIME COMMAND
15144 ? S 0:00 sshd: moi@pts/1
15145 pts/1 Ss 0:00 -bash
15251 pts/1 S+ 0:00 sh for
15256 pts/1 R+ 0:00 ps U moi
toi
PID TTY STAT TIME COMMAND
15174 ? S 0:00 sshd: toi@pts/2
15175 pts/2 Ss+ 0:00 -bash
La recherche continue
a+
for i in $(who | cut -d" " -f1 | uniq);do echo -e "$i\n";ps U $i;done , le saut ligne, moi, descend :ok
cependant, j'ai toujours, bien sûr :
1.mon login
2.STAT
3. mon login (dernière au moins: U moi), mais je ne l'ai pas pour toi, juste son login, à la 2è ligne
Question : est-ce normal, d'avoir plus que la CMD?
a) 2è ligne pour moi
b ) 2è ligne pour toi
moi
PID TTY STAT TIME COMMAND
15144 ? S 0:00 sshd: moi@pts/1
15145 pts/1 Ss 0:00 -bash
15251 pts/1 S+ 0:00 sh for
15256 pts/1 R+ 0:00 ps U moi
toi
PID TTY STAT TIME COMMAND
15174 ? S 0:00 sshd: toi@pts/2
15175 pts/2 Ss+ 0:00 -bash
La recherche continue
a+
nickel ! en enlevant le saut de ligne, mais toujours :
1. TT au lieu de TTY
2. PID pas assez à droite,mais bon, je peux laisser tomber cela.
moi
PID TT TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TT TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
REM. : peut-être un peu plus d'espace entre les connectés ( 1 ou 2 lignes), mais bon, je peux laisser aussi tomber.
la recherche continue au moins pour TTY
merci
A tout à l'heure
1. TT au lieu de TTY
2. PID pas assez à droite,mais bon, je peux laisser tomber cela.
moi
PID TT TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TT TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
REM. : peut-être un peu plus d'espace entre les connectés ( 1 ou 2 lignes), mais bon, je peux laisser aussi tomber.
la recherche continue au moins pour TTY
merci
A tout à l'heure
voilà pour TTY (tname au lieu de tt)
for i in $(who | cut -d" " -f1 | uniq);do echo -e "$i\n";ps -opid,tname,time,comm -U $i;done
et bien sûr, mon login est toujours là, et non mon nom réel ! SAT a disparu, ouf!
et j'ajoute pour ta gloire! l'alignement en sortie est nickel, ce que ne reflète pas ma capture d'écran : voici le vrai alignement à l'écran, en sortie:
moi
PID TT TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TT TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
la recherche continue
a+
et j'ajoute pour ta gloire! l'alignement en sortie est nickel, ce que ne reflète pas ma capture d'écran : voici le vrai alignement à l'écran, en sortie:
moi
PID TT TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TT TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
la recherche continue
a+
nickel pour TTY !
Mais comme une épine dans le pied, il reste mon login, au lieu de mon nom réel !
capture écran :
moi
PID TTY TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TTY TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
merci
a+
Mais comme une épine dans le pied, il reste mon login, au lieu de mon nom réel !
capture écran :
moi
PID TTY TIME COMMAND
15144 ? 00:00:00 sshd
15145 pts/1 00:00:00 bash
15302 pts/1 00:00:00 sh
15307 pts/1 00:00:00 ps
toi
PID TTY TIME COMMAND
15174 ? 00:00:00 sshd
15175 pts/2 00:00:00 bash
15299 pts/2 00:00:00 more
merci
a+
j'étais justement là-dessus, pour essayer de comprendre, comment résoudre ce problème de nom réel et login.
question : en mode asp, comment faire pour copier en local, man ps, par ex.
merci d'avance
a+
question : en mode asp, comment faire pour copier en local, man ps, par ex.
merci d'avance
a+
je vois beaucoup de monde! c'est une formation en ligne ...
Mais il n'y a que moi, de connecté, en ce moment (w)
a+
Mais il n'y a que moi, de connecté, en ce moment (w)
a+
en fait, il faudrait pouvoir extraire mon nom de la sortie de la cmd: grep $USER < /etc/passwd :
moi:x:1553:100:Mon nom:/home/moi:/bin/bash
ou même de finger :moi Mon nom pts/1 Feb 9 11:05
je pensais à cut, mais il y a déjà un cut: mettre un 2è demande réflexion!
a+
moi:x:1553:100:Mon nom:/home/moi:/bin/bash
ou même de finger :moi Mon nom pts/1 Feb 9 11:05
je pensais à cut, mais il y a déjà un cut: mettre un 2è demande réflexion!
a+
Voir post #39
Sinon tu peux aussi :
Édit : Oups ;-((
Sinon tu peux aussi :
finger -sp $USER | tail -1 | tr -s "[ ]*" ":" | cut -d: -f2Mais c'est plus tordu ;-))
Édit : Oups ;-((
finger -sp $USER | tail -1 | tr -s "[ ]" ":" | cut -d: -f2;-))
comme ça?!
for i in $(grep "$(who | cut -d' ' -f1)" /etc/passwd);do echo -e "$i\n" | cut -d':' -f5;ps -opid,tname,time,comm -U ${i%%:*};done
lami, ton script
résultat, extrait: et cela après chaque connecté, prénom affiché seulement.
Donald
PID TTY TIME COMMAND
15762 ? 00:00:00 sshd
15763 pts/4 00:00:00 bash
15786 pts/4 00:00:00 sqlplus
15787 ? 00:00:04 oracle
ERROR: User name does not exist.
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
jipi :
résultat : seulement le prénom est affiché :
prénom (un seul, le mien)
j'essaye de comprendre le message d'erreur et d'en tirer profit
merci de votre contribution
La recherche continue
a+
résultat, extrait: et cela après chaque connecté, prénom affiché seulement.
Donald
PID TTY TIME COMMAND
15762 ? 00:00:00 sshd
15763 pts/4 00:00:00 bash
15786 pts/4 00:00:00 sqlplus
15787 ? 00:00:04 oracle
ERROR: User name does not exist.
********* simple selection ********* ********* selection by list *********
-A all processes -C by command name
-N negate selection -G by real group ID (supports names)
-a all w/ tty except session leaders -U by real user ID (supports names)
-d all except session leaders -g by session OR by effective group name
-e all processes -p by process ID
T all processes on this terminal -s processes in the sessions given
a all w/ tty, including other users -t by tty
g OBSOLETE -- DO NOT USE -u by effective user ID (supports names)
r only running processes U processes for specified users
x processes w/o controlling ttys t by tty
*********** output format ********** *********** long options ***********
-o,o user-defined -f full --Group --User --pid --cols --ppid
-j,j job control s signal --group --user --sid --rows --info
-O,O preloaded -o v virtual memory --cumulative --format --deselect
-l,l long u user-oriented --sort --tty --forest --version
-F extra full X registers --heading --no-heading --context
********* misc options *********
-V,V show version L list format codes f ASCII art forest
-m,m,-L,-T,H threads S children in sum -y change -l format
-M,Z security data c true command name -c scheduling class
-w,w wide output n numeric WCHAN,UID -H process hierarchy
jipi :
résultat : seulement le prénom est affiché :
prénom (un seul, le mien)
j'essaye de comprendre le message d'erreur et d'en tirer profit
merci de votre contribution
La recherche continue
a+