Script permissions

Résolu/Fermé
kamax - 5 sept. 2007 à 14:45
 Simon - 11 janv. 2008 à 13:35
Bonjour, je ne sais pas comment faire les tableaux et j'ai un peu de mal avec les boucle imbriquées.

Je dois écrire un script nommé 'permissions' qui prend comme argument un nom de fichier.
Le script doit me déterminer quelles sont les permissions de owner, de group et de everybody pour le fichier passé en paramètre.
La sortie doit ressemblée à ceci :

READ WRITE EXECUTE
OWNER belkacem.berbache YES YES NO
GROUP USERS YES NO NO
EVERYBODY NO NO NO

--------------------------------------------------------------------------

Mon début de script :

#!bin/bash

for fichier in $1
do
#array[$users]doit contient(OWNER $owner| GROUP $group | EVERYBODY $all)
array[$users]=
array1[$droits]=`ls -dl $fichier | cut -d " " -f1`

#ici il faut faire une boucle imbriquee
echo -n ""; echo "READ WRITE EXECUTE"
echo "${array[$users]} ${array1[$droits]}"
done
A voir également:

9 réponses

kamax54 Messages postés 7 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 5 septembre 2007
5 sept. 2007 à 14:52
j'oubliai, je ne dois ni utiliser sed ni awk .
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 sept. 2007 à 14:54
Salut,

il me semble que j'ai déjà écrit un script pour ce cas sur CCM, mais je ne trouve pas le lien :-)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
5 sept. 2007 à 14:59
Salut,

exercice en shell

;-))
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
5 sept. 2007 à 20:03
Merci ;-))
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019
5 sept. 2007 à 20:09
De rien, mais j'ai posté sans avoir vu ta réponse, je cherchais justement ce post, parce qu'à moi aussi ça me disait quelque chose cet énoncé de problème.

;-))
0
kamax54 Messages postés 7 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 5 septembre 2007
5 sept. 2007 à 15:30
Merci beaucoup. Il y a différente manière d'aborder le problème, la dernière me semble la plus simple. Seulement je voulais te demander si tu pouvais m'argumenter un petit peu...lol

voici ton script :

#!/bin/bash
a=$(ls -l $1 | cut -d' ' -f1)
b=${a//[rwx]/"\toui\t"}
aa=${b//-/"\tnon\t"}
user=$(ls -l $1 | cut -d ' ' -f3)
groupe=$(ls -l $1 | cut -d ' ' -f4)
u=${aa:7:21} g=${aa:21:21} o=${aa:42:21}
echo -e "user:$user\ngroup:$groupe\n"
echo -e " \t\tread\t\twrite\t\texecute"
echo -e "user\t$u\ngroupe\t$g\nautrese\t$o"

En fait je ne comprend pas cette écriture {aa:7:21} => aa 'la chaine', :7 'la longueur a extraire', :21 'à partir de la position 21' ??????
Aussi les slash et backslash, tu les utilises pourquoi ?
b=${a//[rwx]/"\toui\t"}
aa=${b//-/"\tnon\t"}
Mes questions vont te sembler un peu débile mais pourtant ...tout n'est pas clair !! Dernière chose, que signifie l'option -e de echo ?
Lol je débute dsl.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
5 sept. 2007 à 15:57
En fait je ne comprend pas cette écriture {aa:7:21} => aa 'la chaine', :7 'la longueur a extraire', :21 'à partir de la position 21' ??????

aa 'la chaine' = exact

:7 'le début de la chaine à extraire'


:21 'sur une longueur de 21 caractères'


Aussi les slash et backslash, tu les utilises pourquoi ?
b=${a//[rwx]/"\toui\t"}
aa=${b//-/"\tnon\t"}


Les backslashs sont là pour protéger les caractères afin qu'ils ne soient pas interprétés sous leur forme littérale. Dans notre cas "\t" représente une tabulation et non le caractère "t".
Les slashs c'est un peu plus complexe, en fait ils servent à interpréter l'expansion des paramètres. Voir le man bash :
${paramètre//motif/chaîne}
    Le motif est développé comme dans le traitement des noms de fichiers. Le paramètre est développé et la plus longue portion correspondant au motif est remplacée par la chaîneg. Dans la première forme, seule la première correspondance est remplacée, dans la seconde toutes les portions correspondant au motif sont remplacées par la chaîne. Si le motif commence par #, il doit correspondre au début de la valeur développée du paramètre. Si le motif commence par %, il doit correspondre à la fin du développement du paramètre. Si la chaîne est nulle, les portions correspondant au motif sont supprimées et le / après le motif peut être omis. Si le paramètre est @ ou *, l'opération de substitution est appliquée à chacun des paramètres positionnels successivement, et le résultat est la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de substitution s'applique à chaque membre du tableau successivement, et le résultat est la liste finale.

Dernière chose, que signifie l'option -e de echo ?

On demande à la commande echo (ici c'est la commande externe qui est utilisée "/bin/echo" et non pas la commande interne du bash) d'interpréter les séquences précédées par un backslash comme "\t" qui représente une tabulation.
0
kamax54 Messages postés 7 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 5 septembre 2007
5 sept. 2007 à 16:28
Je n'ai pas tout saisi..
a=$(ls -l $1 | cut -d' ' -f1) => ici 'a' représente le 1er champ avant le delimiteur ' ' issu de la commande ls -l , càd a = les permissions ugo
b=${a//[rwx]/"\toui\t"} => càd que si on a un caractère parmi r, w ou x dans le motif alors chaine=>'oui'
aa=${b//-/"\tnon\t"} =>si on a '-' dans le motif alors chaine=>'non' MAIS à quoi correspond le paramètre 'b' ici ?

Aussi je ne comprends pas ta manière de compter :
u=${aa:7:21} g=${aa:21:21} o=${aa:42:21} => peux-tu m'expliquer davantage ces chiffres ?
Dans :
user=$(ls -l $1 | cut -d ' ' -f3)
group=$(ls -l $1 | cut -d ' ' -f4)
ok pour user donc -f3, ok pour group donc -f4...par contre tes chiffres?????

comment s'appelle cette écriture : ${paramètre//motif/chaîne} ?
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
5 sept. 2007 à 18:08
a=$(ls -l $1 | cut -d' ' -f1) => ici 'a' représente le 1er champ avant le delimiteur ' ' issu de la commande ls -l , càd a = les permissions ugo

Oui.


b=${a//[rwx]/"\toui\t"} => càd que si on a un caractère parmi r, w ou x dans le motif alors chaine=>'oui'

Non, c'est plutôt si on a un caractère parmi r, w ou x, on le remplace par OUI.
Un exemple est beaucoup plus parlant :
$ a=$(ls -l foo.sch | cut -d' ' -f1)     # définition de la variable a

$ echo $a     # on l'affiche

-rwxr-xr-x

$ b=${a//[rwx]/"\toui\t"}     # définition de la variable b (on substitue r,w,x par oui

$ echo $b     # on l'affiche (la substitution est globale avec //)

-\toui\t\toui\t\toui\t\toui\t-\toui\t\toui\t-\toui\t

$ aa=${b//-/"\tnon\t"}     # définition de la variable aa à partir de la variable b

$ echo $aa     # cette fois on substitué le - par non

\tnon\t\toui\t\toui\t\toui\t\toui\t\tnon\t\toui\t\toui\t\tnon\t\toui\t

$
voila ;-))

Pour le reste, il te suffit de faire des tests pour voir à quoi ça correspond...
$ echo $aa     # on affiche la variable $aa

\tnon\t\toui\t\toui\t\toui\t\toui\t\tnon\t\toui\t\toui\t\tnon\t\toui\t

$ u=${aa:7:21}     # on définit la variable $u à partir du 7 ème caractère jusqu'au 21 ème ème

$ echo $u     # on l'affiche

\toui\t\toui\t\toui\t

$
et ainsi de suite...
0
kamax54 Messages postés 7 Date d'inscription jeudi 30 août 2007 Statut Membre Dernière intervention 5 septembre 2007
5 sept. 2007 à 18:57
merci encore jipicy, cette fois j'ai bien compris.
0
j'ai remarqué un problème, les colonnes n'ont pas le même ordre que l'ordre normal des permissions.

Comment faire pour inverser l'ordre pour garder l'affichage voulu?
0