BASH problem z gzip

0
#!/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.

2

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

1

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

0

Spacje są istotne:

if [ ... ]; then
fi
0

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

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.

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?

#!/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
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.

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:

#!/bin/sh
echo "Podane rozszerzenie to:"
echo $1
0

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

0

gzip *.txt

0

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

0

na moje oko to gzip *$1

0

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

0

czyli kod bez tych mechanizmow sprawdzajacych dla L2 wygladalby:

#!/bin/sh
if [$# != 0 ]; then
gzip *$1
else echo "Podaj rozszerzenie:"
read L2
gzip *$L2
fi
0

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

#!/usr/bin/env sh

ext=$1

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

gzip *.$ext
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?

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.

0

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

0

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

0
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie: "
  read L2
  if [ $L2 !=0 ]; then
  gzip *.$L2
  else
  fi
fi
1

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

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 #$ ?

1

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

1

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

0

Tak :-)

0
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie"
  read L2
  if [ -z "$L2" ]; then
    fi
else 
    gzip *.$L2
fi

tak?

0
echo "Podaj rozszerzenie"
read L2
if [ ! -z "$L2" ]; then
  gzip *.$L2
fi
0
#!/bin/sh
if [ $# != 0 ]; then
  gzip *.$1
else
  echo "Podaj rozszerzenie"
  read L2
  if [ !  -z "$L2" ]; then
 gzip *.$L2
fi
2

Masz dwa if, lecz tylko jedno fi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1