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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

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

Post 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 :)
Awatar użytkownika
PanCiasteczko
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 07 sty 2007, 16:03
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: Fluxbox
Architektura: x86

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post autor: PanCiasteczko »

co to znaczy "dysk o danej nazwie"?
Tzn jaki parametr ma przyjmowac ta funkcja?
nazwe pliku uzadzenia (sdb3)?
punkt montowania?
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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?
extern

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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/
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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 :)
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
Opalo
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 113
Rejestracja: 07 sty 2009, 09:52
Płeć: Mężczyzna

Odp: [bash] funcja sprawdzajaca czy dysk jest zamontowany

Post 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! ;-)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 13 gości