U mnie kod nie działa, ale na inny sposób niż u Ciebie: nie jest w ogóle wykonywany. Otrzymuję:
syntax error near unexpected token `else'
Czy Ty też otrzymujesz taki błąd w konsoli?
Zobacz: https://ideone.com/MTRQ39
Żeby to poprawić, musi być coś wpisane w klauzuli then
(zamiast #nic
). Czyli na przykład:
(...)
if [ -f $k ] || [ -d $k ]; then echo "Nic tu nie ma"
(...)
Nie bardzo rozumiem więc, co to znaczy u Ciebie "na odwrót" (bo w ogóle nie powinno działać także u Ciebie). Podaj może, jak uruchamiasz skrypt – jakim poleceniem oraz w jakim interpreterze (jeśli oczywiście to wiesz).
UPDATE:
Dwie ogólne rady:
- Mówiąc tak na przyszłość: pamiętaj, że sprawdzenie
[ -f ]
oraz [ -d ]
ogólnie mówiąc nie jest wystarczające. -f
oznacza jedynie "zwykły plik", a nie "każdy plik". Może więc być na przykład tak, że istnieje tzw. dowiązanie symboliczne (ang. symbolic link) o nazwie $k
, które nie zostanie wykryte przez ten warunek; wtedy to dowiązanie zostanie nadpisane poleceniem echo > $k
; stracisz więc jakieś dane. Zobacz:
$ ls wielblad # Upewniamy się, że nie ma w bieżącym katalogu pliku o nazwie "wielblad"
ls: cannot access 'wielblad': No such file or directory
$ echo "Jestem wielbłąd" >> wielblad # Tworzymy więc sobie plik "wielblad" z jedną linią o zawartości "Jestem wielbłąd"
$ ln -s wielblad wielblad-link # Tworzymy dowiązanie symboliczne o nazwie "wielblad-link" do pliku "wielblad"
$ cat wielblad # Tak wygląda zawartość naszego pliku "wielblad"
Jestem wielbłąd
$ cat wielblad-link # Dowiązanie symboliczne powoduje wyświetlenie zawartości pliku "wielblad"
Jestem wielbłąd
$ echo > wielblad-link # Nadpisujemy plik, na który wskazuje dowiązanie symboliczne (KASUJEMY jego zawartość)
$ cat wielblad # Ojej! W pliku nic nie ma!
$
- Jeśli już używasz przekierowania wyjścia (czyli na przykład operatora
>
albo >>
), to zawsze używaj >> zamiast > (chyba że z jakichś poważnych względów nie możesz). Ten pierwszy dopisuje do pliku, ten drugi kasuje zawartość pliku przed dopisaniem.
PS Co do rady nr 1 – żeby wykrywać więcej "rodzajów" plików, zobacz informacje tutaj: https://www.gnu.org/software/bash/manual/html_node/Bash-Conditional-Expressions.html