Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
chciałbym, żeby skrypt który wygląda np.tak:
#!/bin/bash echo podaj zmienną 1 read zmienna1 echo podaj zmienną 2 read zmienna2 echo podaj zmienną 3 read zmienna3 ...
wygenerował plik, który na początku będzie miał zawarte:
#!/bin/bash #zmienne 1=zmienna1 2=zmienna2 3=zmienna3 ... #tutaj dalsza część skryptu istniejąca wcześniej/importowana z innego pliku pliku
jak takie cudo stworzyć?
Offline
echo "Zmienna1=$zmienna1" > plik
echo "Zmienna2=$zmienna2" >> plik
itp
Numerek zmiennej mozesz sobie generowac np:
LICZNIK=1
LICZNIK=$(($LICZNIK+1))
Offline
echo "Zmienna1=$zmienna1" > plik
echo "Zmienna2=$zmienna2" >> plik
tyko że ja bym chciał, żeby te zmienne były wpisywane w pliku pomiędzy
#!/bin/bash
a resztą kodu, który te zmienne ma pobierać do swojego działania... a w tej sytuacji zmienne są dopisywane na koniec pliku.
Offline
możesz rozbić skrypt na dwa pliki, jeden ze zmiennymi i drugi właściwy, do którego będziesz wczytywał ten ze zmiennymi za pomocą
`cat zmienne`
echo "Zmienna1=$zmienna1" > zmienne echo "Zmienna2=$zmienna2" >> zmienne
#!/bin/bash `cat zmienne` kod kod kod kod kod kod
Offline
zawartość pliku zmienne:
Zmienna1=1 Zmienna2=2 Zmienna3=3
wynik skryptu o kodzie:
#!/bin/bash `cat zmienne` echo "zmienna jeden to $Zmienna1, zmienna dwa to $Zmienna2, zmienna trzy to $Zmienna3"
wygląda tak:
grzesiek@laptop:~/skrypty$ sh wynik wynik: line 3: Zmienna1=1: command not found zmienna jeden to , zmienna dwa to , zmienna trzy to
Offline
wynik=
zmienna1=`cat zmienne | grep liczba1| cut -d = -f2` echo $zmienna1
Tak będzie działać
zmienne=
liczba1=x liczba2=y
w wynik dla każdej liczby z pliku zmienne tworzysz oddzielną zmienną
Offline
Może coś takiego:
#!/bin/sh PLIK=bb.sh echo "podaj zmienna2" read zmienna1 echo "podaj zmienna2" read zmienna2 cat << EOF > $PLIK #!/bin/sh zmienna1=$zmienna1 zmienna2=$zmienna2 . /katalog/do/wlaczony_plik EOF
Offline
metoda zaproponowana przez zielonego działa znakomicie :)
pojawił się jednak dziwny problem... polecenie:
tar -cf /home/grzesiek/temp.tar /media/hda1/Program Files/STREAM soft/Ala/Kopia*
kończy się poprawnie utworzeniem archiwum z danymi. ale kiedy chcę pokombinować z importowaniem zmiennych i uruchamiam skrypt:
#!/bin/bash foldery=`cat zmienne | grep Foldery| cut -d = -f2` tar -cf /home/grzesiek/temp.tar $foldery
gdzie plik zmienne wygląda tak:
Foldery=/media/hda1/Program Files/STREAM soft/Ala/Kopia*
to wywala mi:
tar: Usunięcie początkowego `/' z nazw plików tar: /media/hda1/Program\: Nie można stat: Nie ma takiego pliku ani katalogu tar: Files/STREAM\: Nie można stat: Nie ma takiego pliku ani katalogu tar: soft/Ala/Kopia*: Nie można stat: Nie ma takiego pliku ani katalogu tar: Zakończenie z błędem z powodu uprzednich błędów
choć na mój chłopski rozum jedno z drugim jest równoważne...
Offline
ok, pomogli mi na innym forum :) musi być:
#!/bin/bash folder1=`cat zmienne | grep Folder1| cut -d = -f2` folder2=`cat zmienne | grep Folder2| cut -d = -f2` tar -cf /home/grzesiek/temp.tar "$folder1" "$folder2"
gdzie plik zmienne wygląda:
Folder1=sciezka 1 Folder2=sciezka 2
teraz pojawił mi się nowy problem :P w związku z tym, że każda ścieżka w pliku zmienne musi mieć przypisaną swoją zmienną a ja za każdym razem kiedy uruchamiam skrypt nie wiem ile tych ścieżek będzie. więc wymyśliłem sobie takie coś:
echo ile folderow read ile echo podaj folder nr1 read 1 for x in $1 do echo zmienna1=$x >> zmienne done
tylko nie wiem co zrobić, żeby w zależności od wartości zmiennej $ile pętla powtarzała się zmianiając cyfrę 1 na kolejne liczby...
EDIT: ok, już się udało, sorry za zamieszanie. jest:
echo ile read ile x=1; until [ $x -ge $ile ]; do echo podaj folder $x read folder echo folder$x=$folder >> zmienne2 x=$[x + 1] done
Offline
Nie prościej będzie:
folder=a until [ ! $folder ]; do let "x++" echo podaj folder $x read folder if [ $folder ];then echo $folder >> zmienne2;fi done let "x--" echo "wprowadziles $x folderów"
i dalej
#!/bin/bash tar -cf /home/grzesiek/temp.tar `cat zmienne2`
?
Skoro nie wiesz ile tych ścieżek będzie to po co podajesz ich ilość? :)
Offline
Nie prościej będzie:
nie mam pojęcia :P nie znam się prawie w ogóle na bashu. to co umiem/rozumiem pochodzi z kilku stron internetowych... ale mam zamiar się uczyć :D
Skoro nie wiesz ile tych ścieżek będzie to po co podajesz ich ilość? :)
nie wiem w sensie, że za każdym razem zmienna $ile może mieć różną wartość.
ale może powiem o co mi w ogóle chodzi :P
z różnych względów muszę mieć Windowsa98, a że on się często sypie postanowiłem zrobić sobie płytkę na wzór takiej co dają do laptopów niektórych - wkładasz i masz nowy, nie śmigany system na HDD. więc znalazłem (na dugu z resztą :) ) stronkę: http://www.sysresccd.org/Sysresccd-manual-en_How_to … ystemRescueCd.
udało mi się napisać prosty skrypt, który pytał się czy na pewno chcę odtworzyć system, robił backup odpowiednich danych, odtwarzał system, dane wrzucał z powrotem. no ale stwierdziłem, że może uda mi się coś bardziej zaawansowanego stworzyć :D więc postanowiłem zrobić m.in. opcję, która spowoduje że idę do kogoś, wkładam ten mój "CustomRescueCD" wybieram odpowiednią opcję skryptu, i:
-określam której partycji samoodtwarzalny obraz chcę stworzyć
-na jakiej partycji ten obraz zrobić
-które foldery mają być zabezpieczane podczas odtwarzania
i właśnie ten ostatni podpunkt jest przyczyną tego wątku :) mam nadzieję że za bardzo nie namieszałem :P
więc jeśli ktoś jeszcze ma jakieś pomysły co do kodu/opcji przydatnych na takiej płytce, to z chęcią się dowiem jakie to pomysły :)
Offline