Część druga tego mini samouczek programowanie w Bash, gdzie uczymy się używać cykle i inne narzędzia, które pomogą nam ulepszyć funkcjonalność naszego skrypty. |
Jeśli warunkowe
Funkcja If polega na zastosowaniu filtru i wykonaniu operacji lub zadania dla każdego typu zastosowanego filtru. Jego struktura jest następująca:
Jeśli [warunek]; następnie polecenia elif [warunek]; wtedy jeszcze polecenia; fi polecenia
Przykład jest pokazany obok pętli For w odpowiedniej sekcji.
Cyklos
1. While: wykona wszystkie polecenia określone między do i done, o ile warunek będzie prawdziwy. Jeśli chcemy przekazać do niego operatory porównania, wyrażenie musi znajdować się w nawiasach.
podczas gdy CONDITION / COMMAND wykonuje polecenia
Przykład: tabliczka mnożenia liczby
#! / bin / bash X = 1 echo "Wpisz liczbę i naciśnij ENTER" przeczytaj M # Pętla kontroluje, że X jest mniejsze lub równe 10, podczas gdy [$ X –le 10] do # W R przechowujemy mnożenie X by MR = $ [X * M] # To mnożenie jest wypisywane na ekranie echo "$ M * $ X = $ R" # Z let, zwiększamy wartość X o 1 jednostkę niech X = $ X + 1 gotowe
2. Dla: przechowuje listę elementów w zmiennej, które będą używane do wykonywania określonych operacji w każdym cyklu.
dla VARIABLE w ELEMENTS wykonaj polecenia wykonane
Przykład: program, który kopiuje plik z jednego folderu do drugiego, zastępując stary plik.
# / bin / bash # Ustanawiamy katalogi źródłowe i docelowe ORIGIN = / home / user / Downloads DESTINATION = / home / user / Documents # Ustawiamy się w źródłowym cd $ ORIGIN # Ze wszystkich plików chcemy tylko tego, który to # wywołanie PLIKU dla PLIKU w * do ARCH-DESTINATION = "$ DESTINATION / $ FILE" # -f filtruje nam zwykłe pliki, ponieważ katalogi # nie są dla nas niczym dobrym. –Nt odfiltrowuje # plików „nowszych” niż te # znalezione w folderze docelowym, jeśli [-f $ FILE] && [$ FILE –nt $ ARCH-DESTINATION]; następnie echo "Kopiowanie $ FILE ..." # kopiujemy plik za pomocą cp cp $ FILE $ ARCH-DESTINATION fi gotowe #We cd, aby wyjść z folderu źródłowego cd
Inny przykład: skrypt, w którym użytkownik musi odgadnąć losową liczbę wygenerowaną przez komputer.
# / bin / bash # Losowa liczba jest generowana od 1 do 10, jest # zapisywana w RANDOM RANDOM = $ [$ RANDOM% 10 + 1], podczas gdy [1] do echo –n "Podaj liczbę:" przeczytaj NUM # Porównaj, czy liczba wybrana przez użytkownika jest # równa LOSOWO; pamiętaj, aby użyć znaku $ do oceny # wartości zmiennych, a nie ich nazw, jeśli [„$ NUM –eq„ $ RANDOM ”]; następnie echo "Dobrze!" #break umożliwia zakończenie pętli podczas przerwy #Jeśli liczba jest mniejsza niż RANDOM elif [„$ NUM –gt„ $ RANDOM ”]; następnie echo "Jest mniej" "Jeśli nie, jest większe niż LOSOWO w przeciwnym razie echo" JEST większe "fi gotowe
3. Do: struktura dość podobna do While, z tą różnicą, że kod jest wykonywany zawsze, gdy ocena warunku jest ujemna, to znaczy program kontynuuje wykonywanie „aż do wystąpienia warunku”
dopóki CONDITION / COMMAND nie wykonają poleceń
Przykład: wydrukuj liczby 10-20 w porządku malejącym
#! / bin / bash CONT = 20 # Tak długo, jak licznik jest mniejszy niż 10 (-lt, „lower #than”), kod jest wykonywany aż do [$ CONT -lt 10]; do echo "COUNTER $ CONT" #A CONT jest odejmowane przez jednostkę niech CONT- = 1 gotowe
4. Wybierz: ten ostatni cykl jest przypadkiem szczególnym, ponieważ jest zwykle używany do szybkiego tworzenia menu. Działa podobnie do pętli For.
wybierz VARIABLE w LISTA wykonanych poleceń
Przykład: daj użytkownikowi możliwość kontynuowania lub kończenia skryptu.
#! / bin / bash #item to zmienna, która odpowiada na to, co wybierze # użytkownik. Opcje Kontynuuj i Zakończ są dostępne dla niego, chociaż można dodać inne opcje. kończymy program, następnie z przerwą wychodzimy z cyklu. if [$ item = "Finish"]; następnie break fi gotowe
Myślę, że coś takiego: tar -cf - Directory | (cd / inne / katalog; tar -xvf -)
Wtedy wyglądałoby to tak, jak / another / directory / Directory
W ten sposób skompresowałem katalog, a ty rozpakujesz go w innym miejscu….
Witam, dobry tuto, poznaję temat i wszystko jest w porządku, tylko nie udało mi się stworzyć programu, który mi pomaga, żeby zobaczyć, czy możesz mi pomóc.
Muszę zrobić cykl, w którym otrzymam jako parametry listę pliku źródłowego, ta lista zawiera tylko nazwy (bez rozszerzenia), aby cykl wykonywał następujące czynności, poszukaj wspomnianej nazwy otrzymanej w katalogu (czyli ten, którego będziemy szukać), wypakuj i skopiuj plik (pełna nazwa już z rozszerzeniem) oraz ścieżkę bezwzględną i utwórz go w innym pliku docelowym.
Do tej pory mam:
podczas czytania linii
do
echo -e "$ line"
find / home / myuser / dof "$ line" -exec readlink -f {};
gotowe <testlist.txt Do tej pory przeczytałem plik, każdą jego linię, ale nie mogę sprawić, by wyszukał ten plik i wyodrębnił informacje. Jeśli możesz mi pomóc, dziękuję. Twoje zdrowie
Bardzo dziękuję za wkład 🙂
cześć ... Mam nadzieję, że pomożesz w następnej praktyce ... Rozpakuj plik w tgz w podanym katalogu, oprócz określenia użytkownika i grupy dla wszystkich istniejących katalogów i plików oraz przypisania uprawnień do plików i katalogów
uwaga: pliki gotowe do czytania i pisania
uprawnienia do wykonywania katalogów
ARCH-DESTINATION to zmienna, w której chcemy zapisać ścieżkę do pliku docelowego, zachowując ją do redundancji. Następnie do tej zmiennej wskazujemy zmienną DESTINATION, która powyżej zawiera ścieżkę do folderu Dokumenty oraz dodajemy „zmienną” PLIK, która zawiera nazwę pliku. Gdyby ten plik był na przykład list.doc, zmienna ARCH-DESTINATION byłaby równa /home/Usuario/Documentos/listado.doc
To jest poprzedni artykuł. Możesz uzyskać do niego dostęp pod adresem http://usemoslinux.blogspot.com
Przytulić! Paweł.
Dzień dobry kolego tylko dziękuję, bardzo dobry twój blog, ale nie mogę dostać pierwszej części Programowania w Bash, gdzie dostaję dzięki, pozdrawiam
Dwie niezwykłe role, serdecznie gratuluję.
Po prostu wspaniałe.
Bien
Witam, tworzę program z CASE, co chcę, żeby robił i nie wiem jak, na przykład:
echo wybiera opcję:
przegapić
echo 1. opcja 1
echo 2. opcja 2
echo 3. opcja 3
echo 4. opcja 4
echo 5. Zakończ
przeczytaj var
przypadek „$ zmienna” w
1)
echo "Wybrałeś opcję 1"
;;
2)
echo "Wybrałeś opcję 2"
;;
3)
wyrzucił "….."
;;
4)
wyrzucił "…."
;;
5)
wyrzucił "…"
;;
*)
echo „zła opcja”
;;
to C
ok, nie wiem, jak to zrobić, to kiedy wybieram opcję 4, która ma wyjść, pytam, czy naprawdę chcę wyjść, i daj mi 2 opcje T & N
a druga jest taka, że gdy wybierzesz coś innego niż cyfry 1..5 nie głosuj na mnie ze skryptu….
Czy możesz mi pomóc, dzięki.
Cześć, zacząłem pisać skrypty miesiąc temu i dzięki Twoim postom skryptowym. Zrobiłem około 1-15. Z góry bardzo dziękuję. Ale teraz nasz nauczyciel dał nam pracę, w której popadłem w stagnację. Ponieważ nauczyciel pyta:
przekazując katalog, skopiuj do swojego domu wszystkie pliki, które są w tym katalogu alfabetycznie i nadając im nazwy plik1 plik2 itd ... itd ...
Teraz jestem w momencie znajdowania lub lokalizowania, chciałem użyć find, ale kiedy podałem mu kod błędu, taki jak w przypadku dev null, odmówiono uprawnień, a potem się mylę i umieszczam lokalizację, w której jestem:
zlokalizuj $ 1 | grep "/ $ {1} \ $"
ale oczywiście z tym wszyscy wychodzą ...
Dziękuję bardzo, jeśli to przeczytałeś.
Jeśli możesz mi pomóc, byłaby to wielka przysługa.
Chciałbym, żebyś mi w tym pomógł.
1. -Wprowadź całą liczbę za pomocą klawiatury i wyświetl dwukrotnie i potrójną liczbę na ekranie. 2. - Stwórz program, który zdecyduje, czy liczba wprowadzona z klawiatury jest podzielna przez 3, czy nie.
3.- Stwórz program, który znajdzie sumę: ???????? + ???????? + ???????? + ???????? + ⋯? ???????
4.- Stwórz program, aby znaleźć sumę 1 + 3 + 5 + 7 + 9 · · · + (2n + 1).
5.-Stwórz program, który wypisze słowo Linux na ekranie 10 razy
6. -Stwórz program, który wypisze słowo Linux na ekranie tyle razy, ile wskazał użytkownik.
7.-Wprowadź kwotę w godzinach i zamień je na minuty i sekundy.
8.-Obliczyć powierzchnię trójkąta
9.-Wprowadź liczbę na klawiaturze, a jeśli wpiszesz 2, powinna być podniesiona do kwadratu, 3 do kostki, 4 do czwartej i tak dalej, aż do 6.
10-Oblicz emeryturę, którą student musi zapłacić, należy wpisać kod specjalności i dni zaległości:
KOD
SPECJALNOŚĆ
ILOŚĆ
CZAS TRWANIA DZIENNIE
1
PRZETWARZANIE DANYCH
160
1
2
PIELĘGNIARSTWO
150
1.5
3
SEKRETARIAT
140
2
4
TURYSTYKA
180
2.5
5
KSIĘGOWOŚĆ
160
1
Musisz wykazać specjalność, na której się uczysz, koszt emerytury, zaległość oraz całkowitą kwotę do wypłaty.
Witam, czy ktoś może mi pomóc?
Potrzebuję „Poproś o trzy słowa za pomocą klawiatury i wyświetl je w kolejności alfabetycznej od A do z”
W języku Bash lub sh dla LINUX porfaborrrr