Skrypt w bashu - przekazywanie n - parametrów do polecenia

Problemy dotyczące programowania.

Moderatorzy: Moderatorzy, Administratorzy

toro1984
Użytkownik
Posty: 24
Rejestracja: 2007-10-13, 11:03
Lokalizacja: Częstochowa

Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: toro1984 »

Witam :)
Mam do napisania skrypt, w którym użytkownik ma możliwość wywołania polecenia ls bez parametrów, z jednym parametrem lub kilkoma (chodzi dokładnie o wypisanie wszystkich plików z katalogu, użycie długiego formatu przy wypisywaniu danych o plikach, sortowanie wg rozmiaru oraz dodanie do nazwy pliku znacznika typu pliku). Skrypt wydaje się być prosty, jednak nie wiem jak rozróżnić ilość wybranych parametrów tak żeby wywołać odpowiednio polecenie ls. Przy wyborze jednego parametru sprawa jest prosta i wygląda wg mnie tak:

Kod: Zaznacz cały

#!/bin/bash 
 
dialog --title "Zadanie 7" \ 
--backtitle "Przyklady okien dialogowych" \ 
--checklist "Wybierz opcje polecenia ls: " 10 40 5 \ 
1. -a "off" \ 
2. -l "off" \ 
3. -S "off" \ 
4. -F "off" \ 
5. bez opcji 2> wynik 
 
wynik=`cat wynik | tr -d '".'` 
echo $wynik 
if [ "$wynik" = "5" ] ; then 
    echo `ls` > plik 
fi 
 
if [ "$wynik" = "1" ] ; then 
    echo `ls -a` > plik 
fi 
 
if [ "$wynik" = "2" ] ; then 
    echo `ls -l` > plik 
fi 
 
if [ "$wynik" = "3" ] ; then 
    echo `ls -S` > plik 
fi 
 
if [ "$wynik" = "4" ] ; then 
    echo `ls -F` > plik 
fi 
 
dialog --title "Zadanie 7" \ 
--textbox `echo plik` 10 40 \ 
 
echo $wynik  
 
rm -f wynik
Problem się pojawia jak użytkownik wybierze więcej niż jeden parametr. Wiem, że można bawić się w kolejne ify ale jest trochę z tym roboty. Macie pomysł na jakąś szybszą, mniej łopatologiczną metodę ? :)
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: mina86 »

Nie żadne cat wynik | tr -d '".' eytlko tr -d '".' <wynik!
Nie żadne echo `ls` >plik tylko ls >plik!

Kod: Zaznacz cały

OPT=
case $wynik in *1*) OPT="$OPT -a";; esac
case $wynik in *2*) OPT="$OPT -l";; esac
case $wynik in *3*) OPT="$OPT -S";; esac
case $wynik in *4*) OPT="$OPT -F";; esac
ls $OPT
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
toro1984
Użytkownik
Posty: 24
Rejestracja: 2007-10-13, 11:03
Lokalizacja: Częstochowa

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: toro1984 »

mina86, szczerze mówiąc nie za bardzo rozumiem kod, który napisałeś...mógłbyś mi go troszkę rozjaśnić ? :)
robertik
Użytkownik
Posty: 19
Rejestracja: 2004-09-04, 08:39
Lokalizacja: Białystok

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: robertik »

mina86 zastąpił konstrukcje if zestawem case. W tym przypadku parametry będą dodawane odpowiednio w zależności od wybranej opcji.
I odpowiednio wybranie opcji 2 oraz 3 da wynik: "ls -l -S", OPT=" -l -S"
A no i google rulez http://bash.wikidot.com/case
Awatar użytkownika
Kalavan
Użytkownik
Posty: 186
Rejestracja: 2007-01-08, 22:09

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: Kalavan »

A może getopts?
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: mina86 »

Kalavan, też można, ale po co? O wiele więcej pisania i jeszcze trzeba podmienić parametry wywołania, a to nie zawsze jest porządane.

toro1984, co tu tłumaczyć? Wklejasz i działa. Instrukcję case powinieneś znać. Przypisywanie wartości do zmiennych również.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
toro1984
Użytkownik
Posty: 24
Rejestracja: 2007-10-13, 11:03
Lokalizacja: Częstochowa

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: toro1984 »

Spoko, znam case, przypisywanie wartości również. Ale nie rozumiem czym ta konstrukcja różni się od ifa mojego. Skoro wybieram np 1 i 2 to zachodzą pierwsze dwa warunki i najpierw wykonuje się 1 if a pożniej 2 gi if. Tyle, że zawartość "pliku" jest nadpisywana wynikiem drugiego ifa. Nie rozumiem działania tego konkretnego case'a, a dokładnie składni OPT= case.....
Awatar użytkownika
mina86
Moderator
Posty: 3343
Rejestracja: 2004-06-14, 21:58
Lokalizacja: Linux 5.x x86_64
Kontakt:

Re: Skrypt w bashu - przekazywanie n - parametrów do polecenia

Post autor: mina86 »

OPT= wpisuje do zmiennej pusty ciąg. Żadnej tajemnicy w tym nie ma. Jeśli wolisz możesz napisać unset OPT.
Zastrzegam sobie prawo nieanalizowania postów pisanych niepoprawną polszczyzną.
Post generated automatically by A.I. system code name ‘mina86’ in response to the previous one.
ODPOWIEDZ