shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] chmod reverso


From: Fabiano Caixeta Duarte
Subject: Re: [shell-script] chmod reverso
Date: Sat, 22 Nov 2008 10:50:41 -0200

2008/11/22 Ivan lopes <address@hidden>

> ** espero que essa brincadeira seja util para os iniciantes em shel
> e quem tiver um legal, pode mandar tb!
> ** eu acho que em awk dah para fazer isso em uma linha ...mas eu nao sei
> fazer!
>
>
>
> **
> eu sou preguicoso e nao gosto de somar! por isso ... esse pequeno script
>
> exemplo de saida:
> $ ./cchmod.sh *.mpeg *.c *.sh
> -w-r--r-- : 644 : windows_plugin_firefox_test_03.mpeg
> -rw-r--r-- : 644 : magnitude.c
> -rw-r--r-- : 644 : mouse.c
> -rw-r--r-- : 644 : plasma.c
> -rwxr-xr-x : 755 : a.sh
> -rwxr-xr-x : 755 : calculadora.sh
> -rwxr-xr-x : 755 : cchmod.sh
> -rw-r--r-- : 644 : changed.sh
> -rwxr-xr-x : 755 : funcoeszz-8.9.sh
>
> cat cchmod.sh
> #! /bin/bash
>
> for f in $*; do
>
>    W=`ls -l $f| sed 's/ .*//'`
>    echo -n $W
>        echo -n " : "
>
>    c=1
>    for ((i=1;i<${#W};i++));do
>
>        case ${W:$i:1} in
>            -) let s=s+0;;
>            r) let s=s+4;;
>            w) let s=s+2;;
>            x) let s=s+1;;
>        esac
>
>        if test $c -eq  3; then
>            echo -n $s
>            c=1; s=0
>        else
>            let c++
>        fi
>    done
>
>    echo " : $f"
> done
> <address@hidden>


Ivan,

Realmente seu script ficou interessante e didático.

Eu sugiro uma mundança no nome do script para melhorar a semântica. Afinal,
o chmod (change mode) está relacionado com mudança das permissões. Seu
script poderia se chamar lsperms, pois lista os arquivos e mostra, de duas
formas, as permissões.

Se me permite, fiz uma modificação que encurta um pouco o script, usando a
idéia de três blocos de permissão. Veja aí:

#! /bin/bash

for f in $*; do

   W=$(ls -l $f | sed 's/ .*//')
   echo -n "$W : "
   W=${W:1}

   for ((i=0;i<3;i++,s=0)); do

      for ((j=0; j<3; j++)); do

         case ${W:$((3*i+j)):1} in
           -) let s=s+0;;
           r) let s=s+4;;
           w) let s=s+2;;
           x) let s=s+1;;
         esac

      done
      echo -n $s
   done

   echo " : $f"
done


-- 
Fabiano Caixeta Duarte
Especialista em Redes de Computadores
Linux User #195299
Ribeirão Preto - SP


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]