Pokaż wyniki 1 do 3 z 3

Temat: [bash] problem z folderami ktore w nazwie maja spacje

  1. #1

    Domyślnie [bash] problem z folderami ktore w nazwie maja spacje

    witam wszystkich,
    muszę na uczelnie zrobić skrypt w bashu, wszystko już działa ale nie ma zabezpieczenia przed folderami/plikami które w nazwie zawierają spacje. Umiałby ktoś mi doradzić jak go zmodyfikować aby działał bez zarzutów?

    poniżej wkleje kod:
    #!/bin/bash


    dir=/
    temp=`mktemp`
    ilekat=0
    ileplik=0
    ile=0
    xplik=0
    rplik=0
    wplik=0
    xkat=0
    rkat=0
    wkat=0

    if test "$1" = "-h" || test "$1" = "-help"
    then

    echo Witam,
    echo Skrypt sluzy do zliczania plikow oraz katalogow wraz z rekurencyjnie przeszkukiwanymi podkatalogami
    echo i wyswietla ilosc plikow i katalogow z danymi prawami r,w,x dla aktualnie zalogowanego usera.
    echo
    echo Sprosb wywolania:
    echo ------------------
    echo host#bash bash.sh [-f][katalog]
    echo lub
    echo host#bash bash.sh [-d][katalog]
    echo ------------------
    echo
    echo -f wyswietlaj statystyke dla plikow
    echo -d wyswietlaj statystyke dla katalogow



    elif test $# -eq 0
    then
    echo Nie podales parametrow
    elif test $# -gt 3
    then
    echo Zle parametry!
    elif test "$1" != "-d" && test "$1" != "-f"
    then
    echo Zly parametr $1
    elif test $# -eq 2 && test ! -d $2 && test "$2" != "-f" && test "$2" != "-d"
    then
    echo Zly parametr
    elif test "$2" != "-d" && test "$2" != "-f" && test "$2" != "" && test ! -d $2
    then
    echo Zly parametr $2
    elif test $# -eq 3 && test -d $2 && test -d $3
    then
    echo Zle parametry
    elif test $# -eq 3 && test ! -d $3
    then
    echo $3 nie jest katalogiem

    else
    if test -d $3
    then
    dir=$3
    fi
    if test -d $2
    then
    dir=$2
    fi

    find $dir -name '*' -print > $temp

    while read a
    do

    ile=`expr $ile + 1`
    if test -d $a
    then

    ilekat=`expr $ilekat + 1`
    if test -x $a
    then
    xkat=`expr $xkat + 1`
    fi
    if test -r $a
    then
    rkat=`expr $rkat + 1`
    fi
    if test -w $a
    then
    wkat=`expr $wkat + 1`
    fi

    else
    ileplik=`expr $ileplik + 1`

    if test -x $a
    then
    xplik=`expr $xplik + 1`
    fi
    if test -r $a
    then
    rplik=`expr $rplik + 1`
    fi
    if test -w $a
    then
    wplik=`expr $wplik + 1`
    fi

    fi

    done < $temp

    if test "$1" = "-f" || test "$2" = "-f"
    then
    echo Przegladnientych plikow: $ileplik
    echo Liczba plikow wykonywalnych: $xplik
    echo Liczba plikow do odczytu: $rplik
    echo Liczba plikow do pisania: $wplik
    fi
    if test "$1" = "-d" || test "$2" = "-d"
    then
    echo Przegladnietych katalogow: $ilekat
    echo Liczba katalogow z prawem wykonywania: $xkat
    echo Liczba katalogow z prawem do odczytu: $rkat
    echo Liczba katalogow z prawem do zapisu: $wkat
    fi
    fi
    dzięki za wszelkie porady!

  2. #2

    Domyślnie

    Witaj.

    Nie zagłębiając się w szczegóły Twojego skryptu, proponuję zrobić interpolację argumentów (chyba jest coś takiego w bashu) przy instrukcjach warunkowych. W innym razie warunki dostają po kilka argumentów (w zależności ile nazwa pliku/katalogu ma spacji), co prowadzi do błędów. Mówiąc krótko, tam gdzie masz
    Kod:
    ...
    if test -d $a
    ...
    if test -x $a
    ...
    if test -r $a
    ...
    if test -w $a
    ...
    radziłbym zamienić na
    Kod:
    ...
    if test -d "$a"
    ...
    if test -x "$a"
    ...
    if test -r "$a"
    ...
    if test -w "$a"
    ...

  3. #3

    Domyślnie

    tak zrobiłem i zadziałało !
    dzięki..

Podobne wątki

  1. problem z folderami
    By dj_kuki in forum Windows
    Odpowiedzi: 11
    Autor: 09-25-2007, 18:22
  2. Czemu wszyscy maja dostęp do Internetu?
    By kosiarz in forum /dev/null
    Odpowiedzi: 27
    Autor: 08-21-2007, 20:06

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj