2016-02-18 1 views
0

Je veux savoir quelle permission est donnée à un fichier en utilisant un script shell. J'ai donc utilisé le code ci-dessous pour tester un fichier. Mais cela ne montre rien en sortie. Je voulais juste savoir où j'ai fait l'erreur. Aidez-moi, s'il vous plaît. Le fichier "1.py" a tous lu les fichiers d'écriture et d'exécution activés.Gestion des permissions de fichiers sous UNIX en utilisant awk

ls -l 1.py | awk ' {if($1 -eq "-rwxrwxrwx")print 'True'; }' 

Répondre

1

Dans awk, vous ne devriez pas écrire de test shell, par ex. [[ ... -eq ...]], vous devriez le faire de manière awk:

if($1=="whatever")...

+0

Comment ajouter une instruction else? ls -l $ filemame | awk '{if ($ 1 == "-rwxrwxrwx") imprime "Vrai" sinon imprime "Faux"; } ' –

+0

@AravindS pour votre exemple: 'awk' {print ($ 1 ==" quoi "?" True ":" False ")} '' ou 'awk' {if (.....) print" T " ; else print « F »} ' – Kent

+0

Si je donne votre code, il imprime récursive pour de nombreuses fois en continu –

2

Les guillemets simples (') autour True devraient être des guillemets doubles (") et awk utilise == pour comparaison de chaînes.

Toutefois, en fonction de ce que vous essayez de le faire, il pourrait être plus propre à utiliser les tests builtin Bash:

if [ -r 1.py -a -x 1.py ]; then 
    echo "Yes, we can read (-r) and (-a) execute (-x) the file" 
else 
    echo "No, we can't." 
fi 

Cela évite d'avoir à analyser la sortie ls. Pour une liste de vérifications plus longue, voir tldp.org.

+0

Je pense aussi '-rwxrwxrwx' est une faute de frappe,' rwxrwxrwx' a été conçu ici (pas un tiret) – gavv

+0

@gv Non, le premier tiret doit être là: il indique le type ('-' pour les fichiers et' d' pour les répertoires, etc.) –

+0

en effet, mon erreur. – gavv

0

vous pouvez utiliser

ls -l 1.py | awk '{if ($1 == "-rwxrwxrwx") print "True" }' 
+0

Aucun '-eq' dans awk. – gavv

+1

@ g-v '-eq' est valide dans awk, mais pas pour vérifier si la partie gauche et la partie droite sont égales.au lieu de cela, il quitte la partie '- (moins)' la variable 'eq'. Si la variable 'eq' n'a pas été assignée auparavant, choisissez' 0 (zéro) ' – Kent

+0

@Kent Il n'y a pas de -qq dans awk. Le fait qu'il ne provoque pas d'erreur de syntaxe ne change pas cela. – 123