2017-09-07 4 views
-2

Comment vérifier si l'umask empêche la définition des bits de groupe? Ma tentative:Vérification de l'umask dans le script shell

#!/bin/sh 

out=$(umask) 
echo "$out" 

if (($out & 070) != 0); then 
    echo "$out" 
    echo "Incorrect umask" > /dev/tty 
    exit 1 
fi 

Sortie:

./test.sh: line 6: syntax error near unexpected token `!=' 
./test.sh: line 6: `if (($out & 070) != 0); then' 

Je suis ok avec le passage à bash si cela rend les choses plus faciles.

+1

Votre question obtient des votes serrés parce qu'elle est "trop ​​large". Au lieu de nous demander d'écrire toute la solution, vous devriez faire de votre mieux pour la coder vous-même et, si vous ne pouvez pas la faire fonctionner, alors postez ce que vous avez écrit ici et demandez de l'aide pour le résoudre. – Borodin

+0

Ma tentative jusqu'à présent est un désastre. Je l'ai ajouté à la question. – Jean

+0

Merci. Je pense que vous avez besoin de 'if [$ umask & 070 -ne 0]' ou simplement 'if [$ umask & 070]'. Ce n'est pas difficile à trouver avec un google rapide. – Borodin

Répondre

3

Vous devez utiliser des doubles parenthèses pour obtenir une évaluation arithmétique. Voir https://www.gnu.org/software/bash/manual/bashref.html#Conditional-Constructs

m=$(umask) 
if ((($m & 070) != 0)); then 
    echo error 
fi 

Ou vous pourriez traiter le umask comme une chaîne et utiliser glob-pattern matching:

if [[ $m == *0? ]]; then 
    echo OK 
else 
    echo err 
fi 

bash a beaucoup de syntaxe unique: il est pas C/perl comme du tout. Lire (ou au moins se référer à) le manuel et lire beaucoup de questions ici. Continuez à poser des questions.

+0

Réponse Je cherchais. Surtout la dernière partie. Merci! – Jean

+0

Je voulais réellement créer un lien vers le manuel: https://www.gnu.org/software/bash/manual/bashref.html –