BASH problem z gzip

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0
Kopiuj
#!/bin/sh
if[$#!=0]; then
gzip.$1;
else echo "Podaj rozszerzenie"
read L2
gzip.L2
fi

cos nie dziala, ale nie mam pojecia co ;/
tresc zadania
Napisz skrypt, który skompresuje gzipem wszystkie pliki o rozszerzeniu
podanym jako parametr tego skryptu. Skrypt powinien być odporny na
błędy i interaktywnie zapytać o rozszerzenie, gdyby nie podano go jako
parametr.

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

Co to znaczy coś nie działa - skrypt dzwoni na policję zamiast zwracać rozszerzenie?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
1

ah, przepraszam zapomnialem wrzucic blad
syntax error: "then" unexpected

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Spacje są istotne:

Kopiuj
if [ ... ]; then
fi
CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

o, sluszna uwaga, dziala.
dziekuje bardzo, ale czy logicznie tez jest to napisane zgodnie z zadaniem?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

skompresuje gzipem wszystkie pliki o rozszerzeniu
podanym jako parametr tego skryptu

gzip.$1 prawdopodobnie powinno brzmieć gzip "*.$1", podobnie przy drugim wywołaniu.

Skrypt powinien być odporny na
błędy i interaktywnie zapytać o rozszerzenie, gdyby nie podano go jako
parametr.

Nigdzie nie sprawdzasz czy L2 nie jest puste.

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

gzip.$1 prawdopodobnie powinno brzmieć gzip ".$1", podobnie przy drugim wywołaniu.
rozumiem, o ile dzialanie znaku "
" rozumiem, o tyle nie za bardzo umiem sobie to w glowie poukladac, dlaczego akurat dodano go w tym miejscu i to pomiedzy " "

Nigdzie nie sprawdzasz czy L2 nie jest puste.

na szybko pomyslalem tak, dobrze?

Kopiuj
#!/bin/sh
if[$#!=0]; then
gzip.$1;
else echo "Podaj rozszerzenie"
read L2
if [L2!=0]; then
gzip.L2
else
echo "Pusty parametr"
fi
fi
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Nie; zupełnie nie rozumiesz kodu, który piszesz (https://en.wikipedia.org/wiki/Programming_by_permutation).

Zacznijmy powoli: napisz skrypt, który jako argument przyjmuje rozszerzenie i je wypisuje; bez żadnego sprawdzania błędów, bez żadnego gzipowania.

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
1

jak mniemam chodzi o blad w 7 linii, gdzie odnoszac sie do zmiennej zapomnialem "$"
co do twojej sugestii, nie wiem czy dobrze zrozumialem ale:

Kopiuj
#!/bin/sh
echo "Podane rozszerzenie to:"
echo $1
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Oki, to teraz: gdybyś chciał ręcznie, z poziomu konsoli skompresować wszystkie pliki o rozszerzeniu txt, jakie polecenie byś uruchomił?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

gzip *.txt

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Nice - w jaki sposób połączyłbyś teraz gzip *.txt z $1 tak, aby rozszerzenie było dynamiczne?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

na moje oko to gzip *$1

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Zależy - czy $1 (rozszerzenie wpisywane przez użytkownika) zawiera kropkę, czy nie?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

czyli kod bez tych mechanizmow sprawdzajacych dla L2 wygladalby:

Kopiuj
#!/bin/sh
if [$# != 0 ]; then
gzip *$1
else echo "Podaj rozszerzenie:"
read L2
gzip *$L2
fi
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Tak; przy czym personalnie podszedłbym do tematu tak:

Kopiuj
#!/usr/bin/env sh

ext=$1

if [ -z "$ext" ]; then
  echo 'Podaj rozszerzenie:'
  read ext
fi

gzip *.$ext
CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

no domyslam sie ze sa optymalniejsze sposoby, lecz zalezy mi bym rozumial co pisze, a to z warunkiem sprawdzajacym dla L2, to podobnie jak mowilem wczesniej?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Musiałbyś wykorzystać pętlę while, która pytałaby użytkownika o rozszerzenie tak długo, póki nie zostanie ono określone.

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

a nie daloby rady zrobic tego ifem? ze jesli nie poda to po prostu wyjdzie z programu?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Polecenie nie określa tego precyzyjnie; ja bym wykorzystał while, lecz Ty zrób tak, jak uważasz za stosowne :-)

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0
Kopiuj
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie: "
  read L2
  if [ $L2 !=0 ]; then
  gzip *.$L2
  else
  fi
fi
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

Dlaczego w drugiej instrukcji warunkowej przyrównujesz != 0?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

myslalem tez nad sprawdzeniem jak w pierwszym ifie, sam nie do konca wiem jaki warunek przyjac
trzeba sprawdzic czy L2 cos zawiera, wiec moze przy uzyciu #$ ?

Silv
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
1

Pytanie jest, co zawiera $L2, gdy nic nie zawiera?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
1

if [ -z "$L2" ]; then ... ?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0

Tak :-)

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0
Kopiuj
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie"
  read L2
  if [ -z "$L2" ]; then
    fi
else 
    gzip *.$L2
fi

tak?

Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
0
Kopiuj
echo "Podaj rozszerzenie"
read L2
if [ ! -z "$L2" ]; then
  gzip *.$L2
fi
CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0
Kopiuj
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie"
  read L2
  if [ !  -z "$L2" ]; then
 gzip *.$L2
fi
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
2

Masz dwa if, lecz tylko jedno fi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.