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 02/06/2015, à 01:10

LiloMai

Un script shell pour afficher les droits d'acces d'un fichier

Bonsoir, j'ai crée un script shell pour afficher les droits d'acces d'un fichier passé en parametre sous la forme suivante

             read  write  execute
user       oui    non    oui
groupe   oui    non   non
others    oui    non   non

En fait voila mon script, j'ai just récupéré les droits, et je n'ai aucune idée concernant l'affichage

#!/bin/bash
droits=$(ls -l $1 | cut -d ' ' -f1)
user=$(ls -l $1 | cut -d ' ' -f3)
groupe=$(ls -l $1 | cut -d ' ' -f4)
echo "-------------Les droits d'acces de $1---------------------"
n=1
for u in "Le user " " $groupe" "Les autres"
do

d=${droits:n:3}
if [ "$d" = "---" ]
then
var1="Non"
var2="Non"
var3="Non"
elif [ "$d" = "r--" ]
then
var1="Oui"
var2="Non"
var3="Non"
elif [ "$d" = "rwx" ]
then
var1="Oui"
var2="Oui"
var3="Oui"
elif [ "$d" = "-wx" ]
then
var1="Non"
var2="Oui"
var3="Oui"
elif [ "$d" = "--x" ]
then
var1="Non"
var2="Non"
var3="Oui"
elif [ "$d" = "r-x" ]
then
var1="Oui"
var2="Non"
var3="Oui"
elif [ "$d" = "rw-" ]
then
var1="Oui"
var2="Oui"
var3="Non"
else
var1="Non"
var2="Oui"
var3="Non"
fi
echo  " $var1  $var2   $var3"
n=$((n+3))
done

Modération : merci à l'avenir d'utiliser les balises code (explications ici).

Attention ! Les doublons sont interdits.

Dernière modification par cqfd93 (Le 02/06/2015, à 08:09)

Hors ligne

#2 Le 02/06/2015, à 07:25

pingouinux

Re : Un script shell pour afficher les droits d'acces d'un fichier

Bonjour,
Ton script fait presque ce que tu veux. Sur les lignes 2 à 4, remplace ls -l $1 par ls -ld "$1" (utile si le nom du fichier contient des espaces, et pour ne pas lister le contenu des répertoires).
Remplace la ligne 7 par

for u in "user  " "groupe" "others"

et la ligne 51 par

echo  "$u $var1  $var2   $var3"

Ajoute enfin cette ligne après la ligne 5

echo  "       read write execute"

Remarque : Tu as lancé 2 fois la même discussion

Édité : Réponse complétée

Il y a des cas qui ne seront pas traités correctement (lorsque les permissions sont autre chose que -, r, w ou x, comme par exemple s, S, t, ou T).

Dernière modification par pingouinux (Le 02/06/2015, à 07:46)

Hors ligne

#3 Le 03/06/2015, à 10:28

LiloMai

Re : Un script shell pour afficher les droits d'acces d'un fichier

C'est la premiere fois que je lance une discussion sur le forum et je ne savais pas comment... D'où les deux discussions,
Je viens de le tester, il marche comme il faut !
Merci bcp big_smile

Hors ligne

#4 Le 03/06/2015, à 10:37

pingouinux

Re : Un script shell pour afficher les droits d'acces d'un fichier

Voici une autre façon de faire, complètement différente, qui utilise la commande stat pour récupérer les permissions en octal. Il n'y a plus les restrictions que j'indique à la fin de mon message #2.

#!/bin/bash

trace() {
   printf "%-11s" "$1"
   for n in 4 2 1;do (($2&$n)) && printf " %7s" oui || printf " %7s" non;done
   printf "\n"
}  
perms=$(stat -c %a "$1") || exit 1

o=$((perms%10)); ((perms/=10))
g=$((perms%10)); ((perms/=10))
u=$((perms%10))

printf "%11s    Les droits d'accès de %s\n" "" "$1"
printf "%11s %7s %7s %7s\n" "" read write execute

trace 'Utilisateur' $u
trace 'Groupe'      $g
trace 'Autres'      $o

Hors ligne