Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: opcje do wyboru (case?)  (Przeczytany 5333 razy)

plord

  • Gość
opcje do wyboru (case?)
« dnia: 2011-01-06, 17:39:35 »
Otóż mam taki kod np

#!/bin/bash
echo "SKRYPT WYŚWIETLAJĄCY INFORMACJE O SYSTEMIE "
echo

# INFO O CPU

echo "Model procesora:"
cat /proc/cpuinfo |grep 'model name'
echo
echo "Taktowanie procesora:"
cat /proc/cpuinfo |grep 'cpu MHz'
echo

# INFO O RAM

echo "Cała pamięć RAM"
cat /proc/meminfo | grep 'MemTotal'
echo "Wolna pamięć RAM"
cat /proc/meminfo | grep 'MemFree'
echo
i chcę żeby użytkownik wybierał to co chce wyświetlić np pod 1 będzie info o CPU, jak objąć case'em te kilka linijek? może jest jakiś inny sposób niż case?

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
opcje do wyboru (case?)
« Odpowiedź #1 dnia: 2011-01-06, 18:47:42 »
Możesz to zrobić przy pomocy if ale jeśli wolisz case, to proponuję obrać to w funkcje:

#!/bin/bash

# INFO O CPU

cpu()
{
echo -e "\\nModel procesora: $(cat /proc/cpuinfo |grep 'model name')\\n"
echo -e "Taktowanie procesora: $(cat /proc/cpuinfo |grep 'cpu MHz')\\n"
}

# INFO O RAM

ram()
{
echo -e "\\nCała pamięć RAM $(cat /proc/meminfo | grep 'MemTotal')\\n"
echo -e "Wolna pamięć RAM $(cat /proc/meminfo | grep 'MemFree')\\n"
}

echo -e "SKRYPT WYŚWIETLAJĄCY INFORMACJE O SYSTEMIE\\n"
echo -e "Wybierz opcję:\\n"
echo "1. Wyświetl informację o procesorze."
echo "2. Wyświetl informację o pamięci RAM."
echo -ne "\\nTwój wybór: "

read odp
case $odp in
    "1") cpu ;;
    "2") ram ;;
    *) echo "Nic nie wybrałeś"
esac
Lub tak

#!/bin/bash

# INFO O CPU

cpu()
{
echo -e "\\nModel procesora: $(cat /proc/cpuinfo |grep 'model name')\\n"
echo -e "Taktowanie procesora: $(cat /proc/cpuinfo |grep 'cpu MHz')\\n"
}

# INFO O RAM

ram()
{
echo -e "\\nCała pamięć RAM $(cat /proc/meminfo | grep 'MemTotal')\\n"
echo -e "Wolna pamięć RAM $(cat /proc/meminfo | grep 'MemFree')\\n"
}

echo -e "SKRYPT WYŚWIETLAJĄCY INFORMACJE O SYSTEMIE\\n"
echo -n "Wyświetl informację o: "

read odp
case $odp in
"cpu") cpu ;;
"ram") ram ;;
*) echo "Nic nie wybrałeś"
esac
Pozdrawiam!

plord

  • Gość
opcje do wyboru (case?)
« Odpowiedź #2 dnia: 2011-01-06, 22:24:16 »
dzięki wielkie!

#!/bin/ba#!/bin/bash


# INFO O CPU

cpu()
{
echo -e "\\nModel procesora: $(cat /proc/cpuinfo |grep 'model name')\\n"
echo -e "Taktowanie procesora: $(cat /proc/cpuinfo |grep 'cpu MHz')\\n"
}

# INFO O RAM

ram()
{
echo -e "\\nCała pamięć RAM: $(cat /proc/meminfo | grep 'MemTotal')\\n"
echo -e "Wolna pamięć RAM: $(cat /proc/meminfo | grep 'MemFree')\\n"
}

# INFO HDD

hdd()
{
echo -e "\\nStan zamontowanych systemów plików:\\n"
echo
df -h
echo
}

#USR

usr()
{
echo -e "\\nInformacje o użytkownikach\\n"
w
echo -e "\\nTWOJE PROCESY\\n"
ps
echo
}

echo -e "SKRYPT WYŚWIETLAJĄCY INFORMACJE O SYSTEMIE\\n"
echo
echo "Ze skryptu korzysta użytkownik:$(whoami)"
echo "a maska na dziś wynosi:$(umask)"

echo
echo -e "Wybierz opcję:\\n"
echo "1. Wyświetl informację o procesorze."
echo "2. Wyświetl informację o pamięci RAM."
echo "3. Wyświetl informacje o zamontowanych systemach plikow(HDD)."
echo "4. Wyświetl informacje o użytkownikach."
echo -ne "\\nWybrałeś: "

read odp
case $odp in
    "1") cpu ;;
    "2") ram ;;
    "3") hdd ;;
    "4") usr ;;
    *) echo "Nic nie wybrałeś"
esac
tak to ująłem :)
2 szybkie pytanka:
 - jak wyświetlam info o procesorze to mi powiela to samo 4x, to przez to że mam 4 rdzenie? (nie mam innego kompa pod ręką żeby sprawdzić)
 - czy jest jeszcze jakieś info które można wyciągnąć z plików linuxa? bo to o hdd i userach co zrobiłem to tylko pojedyńcze instrukcje do których w sumie aż skryptu nie trzeba.. :)

jeszcze raz thx i pozdro!

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
opcje do wyboru (case?)
« Odpowiedź #3 dnia: 2011-01-07, 01:15:51 »
Cytat: plord
- jak wyświetlam info o procesorze to mi powiela to samo 4x, to przez to że mam 4 rdzenie? (nie mam innego kompa pod ręką żeby sprawdzić)
Jakbyś przejrzał co jest w pliku /proc/cpuinfo to byś zobaczył, że w pliku jest 4x (w Twoim przypadku) powtórzone to samo, różniące się tylko liczbą na początku. Dobrze się domyślasz, że to jest powtórzone tyle razy ile masz procesorów/rdzeni na pokładzie.

Mam wrażenie że trzepnąłeś 'gotowca' nie do końca wiedząc co tam się dokładnie dzieje. ;)

Cytat: plord
- czy jest jeszcze jakieś info które można wyciągnąć z plików linuxa?
Przejrzyj cały katalog /proc coś znajdziesz. Jest cała masa info, które można wygrzebać z plików. Wersja kernela, wersja kompilatora, zainstalowane jakieś kluczowe biblioteki itp. Jeśli chcesz jakieś wyzwania, spróbuj określić za pomocą skryptu jaką dystrybucję posiada użytkownik. Z doświadczenia wiem, że co distro, to inne miejsce, po którym można to określić, czasem nawet nie znajdziesz nic takiego, po nazwach bibliotek trzeba szukać. Robota na kilka wieczorów :P

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
opcje do wyboru (case?)
« Odpowiedź #4 dnia: 2011-01-07, 02:26:45 »
Cytat: plord
hdd()
{
echo -e "\\nStan zamontowanych systemów plików:\\n"
echo
df -h
echo
}

#USR

usr()
{
echo -e "\\nInformacje o użytkownikach\\n"
w
echo -e "\\nTWOJE PROCESY\\n"
ps
echo
}
Tak chciałem Ci już wcześniej zwrócić uwagę ale myślałem, że wywnioskujesz to sobie z mojego kodu. Otóż, nie ma sensu pisać po każdym poleceniu "gołego" polecenia echo tylko po to, żeby uzyskać pustą linię, po to właśnie jest polecenie echo -e "\\n...\\n", oznacza to, że -e interpretuje sekwencje specjalne, w tym \\n oznacza tyle co przejście do nowej linii, czyli tak jakbyś wcisnął enter, dlatego zamiast echo, podaje się echo -e i odpowiednią sekwencję. Więcej w man echo.

Pozdrawiam!

plord

  • Gość
opcje do wyboru (case?)
« Odpowiedź #5 dnia: 2011-01-07, 13:09:52 »
@mateo86, jak uruchomiłem pierwszy raz samą linijkę do cpuinfo to oczywiście od razu 'pobiegłem' w graficznym do tego pliku zobaczyć co jest, wyświetla mi ten plik jako pusty dokument [size 0b] Oo pracuje na maszynie wirtualnej, może dlatego...?
przyznaje że o tym pliku przeczytałem na necie, ale z doświadczenia wiem że jak coś znajdziesz w necie to trzeba sprawdzić czy i jak to działa :)

@roobal zauważyłem, ten kod co wrzuciłem w poście przeszedł jeszcze później parę poprawek :)
jednak jak zacząłem stosować -e \\n do prostych komend np df to nie wygląda to fajnie w oknie terminala bo przesuwa pierwszy wiersz w tej tabelce i przestaje być ona czytelna. a jako beginner w bashu nie wiem jak to komendami poprzesuwać (jeśli się da) :)

jeszcze jedno pytanie mi się nasunęło - można zrobić jakiś warunek po wykonaniu którego będzie można opuścić skrypt? np znak q w wyborze będzie oznaczał zakończenie skryptu, żeby użytkownik mógł wybrać np info o hdd i cpu w jednym 'cyklu' skrytpu. (uciążliwe jest odpalanie w kółko skryptu, user-friendly chciałbym żeby był :))

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
opcje do wyboru (case?)
« Odpowiedź #6 dnia: 2011-01-07, 17:31:57 »
W takim razie musiałbyś użyć jakieś pentli, w tym wypadku np. while.

#!/bin/bash

# INFO O CPU

cpu()
{
echo -e "\\nModel procesora: $(cat /proc/cpuinfo |grep 'model name')\\n"
echo -e "Taktowanie procesora: $(cat /proc/cpuinfo |grep 'cpu MHz')\\n"
menu
}

# INFO O RAM

ram()
{
echo -e "\\nCała pamięć RAM $(cat /proc/meminfo | grep 'MemTotal')\\n"
echo -e "Wolna pamięć RAM $(cat /proc/meminfo | grep 'MemFree')\\n"
menu
}

menu()
{
echo -e "SKRYPT WYŚWIETLAJĄCY INFORMACJE O SYSTEMIE\\n"
echo -e "Wybierz opcję:\\n"
echo "1. Wyświetl informację o procesorze."
echo "2. Wyświetl informację o pamięci RAM."
echo -e "\\nWciśnij q, aby wyjść."
echo -ne "\\nTwój wybór: "
}

menu
while [ 0 ]; do
read odp
case $odp in
"1") cpu ;;
"2") ram ;;
"q") exit 0 ;;
*) echo "Nic nie wybrałeś"
esac
done
Pozdrawiam!

plord

  • Gość
opcje do wyboru (case?)
« Odpowiedź #7 dnia: 2011-01-08, 14:16:07 »
@roobal  dzięki wielkie za pomoc, pozdrawiam!

Offline roobal

  • Users
  • Guru
  • *****
  • Wiadomości: 2056
    • Zobacz profil
opcje do wyboru (case?)
« Odpowiedź #8 dnia: 2011-01-08, 14:43:54 »
Nie za ma co? Na jaki adres wysłać rachunek? :P

Pozdrawiam!

Ksanderon

  • Gość
opcje do wyboru (case?)
« Odpowiedź #9 dnia: 2011-01-08, 16:17:29 »
pliki w katalogu proc maja 0 rormiar pomiewaz tak na prawde ich nie ma na dysku. sa tylko interfejsem kernela.

inne ciekawe katalogi?
/dev i /sys