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:
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:
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:
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!
