Strona 1 z 1

[solved][bash] funcja sprawdzajaca czy dysk jest zamontowany

: 24 sty 2010, 15:45
autor: Opalo
Witam!

Pisze pewien skrypt w bashu i chcialbym napisac w nim funkcje ktora sprawdzi czy dysk o danej nazwie jest zamontowany. Chcialbym tej funkcji uzyc mniej wiecej tak:

Kod: Zaznacz cały

if ismounted() then
## jakies czynnosci
fi
Nie za bardzo wiem tylko jak sprawdzic czy dysk jest zamontowany i jak napisac funckje zeby mozna bylo wykorzystac wyzej opsiana konstrukcje. Wszelkie pomysly mile widziane. Dzieki :)

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 24 sty 2010, 18:31
autor: PanCiasteczko
co to znaczy "dysk o danej nazwie"?
Tzn jaki parametr ma przyjmowac ta funkcja?
nazwe pliku uzadzenia (sdb3)?
punkt montowania?

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 24 sty 2010, 19:13
autor: Opalo
Ma przyjmowac nazwe woluminu np. "Pendrive23". I w odpowiedzi mi zwrocic czy urzadzenie o takiej nazwie jest zamontowane i mozna na nie przeslac / odczytac z niego dane.

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 24 sty 2010, 21:05
autor: beluosus
Być może któreś z poniższych rozwiązań pomoże.

Kod: Zaznacz cały

if [ -n "$(ls /dev/disk/by-label/Label 2> /dev/null)" ]; then echo zamontowany; fi

Kod: Zaznacz cały

ls /dev/disk/by-label/Label &> /dev/null && echo zamontowany

Kod: Zaznacz cały

if [ -n "$(grep sda5 /etc/mtab)" ]; then echo zamontowany; fi

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 25 sty 2010, 16:48
autor: Opalo
Dzieki za podpowiedzi. Pierwsza i druga opcja dzialaja. Tylko nie rozumiem jednej rzeczy. Kiedy w konsoli napisze:

Kod: Zaznacz cały

umount /media/Pendrive23
to oba sposoby dalej zwracaja, ze dysk jest zamontowany. Czemu tak sie dzieje?

I drugie pytanie, jak mozna ubrac to w funkcje, ktora bedzie mozna wywyolac w ifie? Bede chial to sprawdzac w kilu miejsach i nie chce powtarzac kodu?

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 25 sty 2010, 17:00
autor: extern
One nie zwracają informacji, czy dysk jest zamontowany.

Nie mam teraz Linuksa pod ręką, ale w katalogu /proc znajdziesz potrzebne informacje.
Wystarczy sprawdzić grepem, czy jest w pliku szukana fraza. Niestety nie podam Ci konkretnej nazwy z wcześniej wymienionego powodu.

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 25 sty 2010, 20:05
autor: beluosus
Mój błąd, pierwsze dwa sposoby odnoszą się do tego czy dysk jest podłączony, a nie zamontowany. Ostatni sposób powinien działać. Sprawa z funkcją wygląda tak:

Kod: Zaznacz cały

#!/bin/bash

function ifMounted
{
    if [ -n "$(grep $1 /proc/mounts)" ]
    then
        return 1
    else
        return 0
    fi
}

ifMounted "sdb1" || echo zamontowany && echo nie zamontowany
Tutaj korzystam z /proc jak zaproponował extern, aczkolwiek niemal to samo info jest w /etc/mtab. Aby sprawdzić powiązanie "Labela" z urządzeniem:

Kod: Zaznacz cały

ls -l /dev/disk/by-label/

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 25 sty 2010, 21:02
autor: otokan
A nie lepiej?

Kod: Zaznacz cały

function isMounted
{
    grep -qs "$1" /proc/mounts
    return $?
}
/etc/mtab potrafi być czasem nieaktualny - np. gdy /etc jest podmontowane w trybie ro

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 26 sty 2010, 21:00
autor: Opalo
Przepraszam, ze tak sie ciagnie ten temat, ale nie mam czasu sie za bardzo zajac nim dlatego pisze z takimi odstepami.
Napisalem taki skrypt:

Kod: Zaznacz cały

#!/bin/bash

label="OPALDRIVE"

function check_if_mounted() {
    if [ -n "$(grep $1 /proc/mounts)" ]
    then
        return 1
    else
        return 0
    fi  
}

if [ check_if_mounted $OPALDRIVE ]
then
    echo 'jest'
else
    echo 'nie jest'
fi
Problem w tym, ze w rezultacie zawsze wyswietla 'jest'. Czy cos jest nie tak w sensie rozwiazania, czy moze popelnilem jakis blad skladniowy? W bash'u nie jestem szczegolnie biegly, ale chce sie pewnych rzeczy nauczyc :)

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 26 sty 2010, 21:30
autor: beluosus
Przecież pokazałem jak skorzystać. Jeśli chcesz koniecznie ifa to tak może być:

Kod: Zaznacz cały

ifMounted "sdb1"
if [ $? == 1 ]
then
    echo zamontowany
else
    echo nie zamontowany
fi

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

: 26 sty 2010, 21:53
autor: Opalo
No pisalem, ze chce wywolac ta funkcje w if'ie bo nie chce powtarzac kodu. Tak czy inaczej, bardzo dziekuje za pomoc. Dziala super! ;-)