utworzenie folderu w bash

0

"-p")
if [ $# = 2 ]; then #petla sprawdzająca ilość parametrów
tablica=($2)
for k in "${tablica[@]}"
do
if [ -f $k ] || [ -d $k ]; then 
else
echo > $k
fi
done

Witam czy chcial by ktos pomoc poniewaz utworzylem skryp w bashu lecz nie dziala on prawidlowo (to moje poczatki w bashem)
jesli nie ma pliku ani folderu to utworzy plik

0

#!/bin/bash
 case $1 in
 "-k") 
if [ $# = 2 ]; then #petla sprawdzająca ilość parametrów
tablica=( "a" "c" "g" "w" "z" "9" "6" "qa")
for k in "${tablica[@]}"
do
mkdir $2$k
done
else
echo "Podałeś niewłaściwą ilość parametrów, ten przełącznik wymaga dokładnie jednego parametru."
fi;;
"-w")
if [ $# = 3 ]; then #petla sprawdzająca ilość parametrów
tablica=($3)
for k in "${tablica[@]}"
do
mkdir $2$k
done
else
echo "Podałeś niewłaściwą ilość parametrów, ten przełącznik wymaga dokładnie dwóch parametrów."
fi;;
"-p")
if [ $# = 2 ]; then #petla sprawdzająca ilość parametrów
tablica=($2)
for k in "${tablica[@]}"
do
if [ -f $k ] || [ -d $k ]; then 
else
echo > $k
fi
done
name=$USER"`date +"_%d_%m_%Y_%H_%M"`.tar.gz"
tar -czf $name $2
else
echo "Podałeś niewłaściwą ilość parametrów, ten przełącznik wymaga dokładnie jednego parametru."
fi;;

*)
echo "Prawidłowe użycie: "
echo " $0 przełączników"
echo
echo "-k <prefix> - tworzy osiem katalogów których nazwa rozpoczynają się od prefixu i kończą się wg schematu"
echo " -w <prefix> '<lista suffixów>' - tworzy katalogów składających się z prefixu połączonego z listą suffixów"
echo " -p '<lista plików>' - archiwizacja i kompresja plików podanych na liście."
esac
0

lecz nie wiem jak go sformatowac na tej stronie

0

@newhere: Zedytuj post i kliknij, w prawym dolnym rogu: "Mardown jest obsługiwany", tam jest info; kod możesz sprawdzać, klikając "Podgląd".

1

Doprecyzuj, proszę, co to znaczy, że kod nie działa prawidłowo. Dodają się jakieś pliki? Usuwają się? Zmienne mają inne wartości? Nic się nie dzieje?


PS Na wszelki wypadek: na jakiej wersji Basha uruchamiasz? Żeby to sprawdzić, możesz na przykład wykonać polecenie bash --version.

0

chodzi o to ze


"-p")
if [ $# = 2 ]; then #petla sprawdzająca ilość parametrów
tablica=($2)
for k in "${tablica[@]}"
do
if [ -f $k ] || [ -d $k ]; then 
#nic
else
echo > $k
fi
done

dany fragment dziala na odwrot i czyli jeśli "nie ma pliku ani folderu" to utwórz plik a nie tak ja zrobiłe jesli jest to nic

0

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:

  1. 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!

$ 
  1. 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

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