Programozás a bash-ban - 2. rész

Második rész ebből mini-oktatóanyag programozás Bash, ahol megtanuljuk használni ciklusok és egyéb eszközök, amelyek segítenek javítani a funkcionalitás szkriptek.

Az If feltételes

Az If funkciója egy szűrő alkalmazása és egy művelet vagy feladat végrehajtása minden alkalmazott szűrőtípushoz. Szerkezete a következő:

Ha [feltétel]; majd elif parancsokat ad [feltétel]; akkor más parancsol; fi parancsok

Egy példa látható a For ciklus mellett, annak megfelelő szakaszában.

Ciklusok

1. While: mindaddig végrehajtja a do és a done között megadott parancsokat, amíg a feltétel igaz. Ha összehasonlító operátorokat akarunk átadni neki, akkor a kifejezésnek zárójelben kell lennie.

míg a CONDITION / COMMAND parancsokat végrehajtja

Példa: egy szám szorzótáblája

#! / bin / bash X = 1 visszhang "Írjon be egy számot, és nyomja meg az ENTER billentyűt" és olvassa el M # A hurok azt vezérli, hogy X kisebb vagy egyenlő, mint 10, míg [$ X –le 10] nem # R-ben tároljuk a szorzót X MR = $ [X * M] # Ez a szorzás a képernyőn van kinyomva: "$ M * $ X = $ R" #Hagyatékkal 1 egységgel növeljük az X értékét, hagyjuk, hogy X = $ X + 1 készen legyen

2. For: tárolja a változóban található elemek listáját, amelyek felhasználásával bizonyos műveleteket végeznek az egyes ciklusokkal.

for VARIABLE in ELEMENTS parancsokat hajtott végre

Példa: olyan program, amely egy fájlt átmásol egyik mappából egy másikba, egy régi fájlt helyettesítve.

# / bin / bash #Hozzuk létre a forrás és a célkönyvtárakat a # call FILE for FILE in * do ARCH-DESTINATION = "$ DESTINATION / $ FILE" # -f kiszűri a rendszeres fájlokat, mivel a könyvtárak #nincsenek jóak számunkra. –Nt nem szűr ki # fájlt „újonnan”, mint a célmappában található # fájl, ha [-f $ FILE] && [$ FILE –nt $ ARCH-DESTINATION]; majd visszhangozzuk a "$ FILE másolása ..." # másoljuk a fájlt a következővel: cp cp $ FILE $ ARCH-DESTINATION fi done #We cd to exit the source folder cd

Egy másik példa: szkript, ahol a felhasználónak kitalálnia kell a számítógép által generált véletlenszerű számot.

# / bin / bash # Véletlenszám generálódik 1-től 10-ig, # elmentésre kerül a VÉLETLEN VÉLETLEN = $ [$ RANDOM% 10 + 1], míg [1] visszhangzik -n "Írjon be egy számot:" a NUM # számot olvassa Hasonlítsa össze, ha a felhasználó által választott szám #egyenlő a RANDOM értékkel; ne felejtsen el használni a $ értéket a változók # értékeinek értékelésére, nem pedig a nevükre, ha [“$ NUM –eq“ $ RANDOM ”]; majd visszhangzik: "Jól értetted!" A #break lehetővé teszi a hurok befejezését, míg a # törés, ha a szám kisebb, mint a RANDOM elif [“$ NUM –gt“ $ RANDOM ”]; akkor visszhang "Kevesebb" "Ha nem, akkor nagyobb, mint a VÉLETLEN, más visszhang" IS nagyobb "

3. Until: felépítésében meglehetősen hasonló a While-hez, azzal a különbséggel, hogy a kód mindig végrehajtódik, míg a feltétel kiértékelése negatív, vagyis a program folytatja a "feltétel teljesülését"

amíg a CONDITION / COMMAND parancsokat nem hajtja végre

Példa: nyomtassa ki a 10-20-as számokat csökkenő sorrendben

#! / bin / bash CONT = 20 # Mindaddig, amíg a számláló 10-nél kisebb (-lt, "alacsonyabb #, mint"), a kódot [$ CONT -lt 10] -ig hajtják végre; do echo "COUNTER $ CONT" #A CONT-et kivonja egy egység, hagyja, hogy a CONT- = 1 kész legyen

4. Kiválasztás: ez az utolsó ciklus különleges eset, mivel általában a menük gyors elkészítésére használják. Hasonlóan működik, mint a For hurok.

válassza a VARIABLE lehetőséget a végrehajtott parancsok listáján

Példa: adja meg a felhasználónak a szkript folytatásának vagy befejezésének lehetőségét.

A #! / bin / bash #item egy olyan változó, amely válaszol arra, amit a # felhasználó választ, a Folytatás és Befejezés a # opció áll rendelkezésére, bár további lehetőségek is hozzáadhatók # további kiválasztott elem a Folytatás befejezéséhez c a program befejezéséhez, majd szünettel kilépünk a ciklusból. ha [$ item = "Befejezés"]; majd szünet kész
Köszönöm Juan Carlos Ortiz!

Hagyja megjegyzését

E-mail címed nem kerül nyilvánosságra. Kötelező mezők vannak jelölve *

*

*

  1. Az adatokért felelős: Miguel Ángel Gatón
  2. Az adatok célja: A SPAM ellenőrzése, a megjegyzések kezelése.
  3. Legitimáció: Az Ön beleegyezése
  4. Az adatok közlése: Az adatokat csak jogi kötelezettség alapján továbbítjuk harmadik felekkel.
  5. Adattárolás: Az Occentus Networks (EU) által üzemeltetett adatbázis
  6. Jogok: Bármikor korlátozhatja, helyreállíthatja és törölheti adatait.

  1.   Közepesen nehéz dijo

    Szerintem valami ilyesmi: tar -cf - Directory | (cd / egyéb / könyvtár; tar -xvf -)

    Akkor úgy néz ki, mint / másik / könyvtár / Directory
    Így tömörítettem egy könyvtárat, és egy másik helyen dekompresszáltad….

  2.   Miguel Angel dijo

    Helló, jó tuto, megtanulom a témát, és minden rendben van, csak nem sikerült olyan programot készítenem, amely segít nekem, hátha tudsz segíteni nekem.

    El kell végeznem egy ciklust, amelyben paraméterként megkapja a forrásfájl listáját, ez a lista csak neveket hoz (kiterjesztés nélkül), így a ciklus a következőket teszi, keresse meg az említett nevet egy könyvtárban (amely amelyet keresni fogunk), bontsa ki és másolja a fájlt (teljes név már kiterjesztéssel) és az abszolút elérési utat, majd hozza létre egy másik célfájlban.

    Eddig a következővel rendelkezem:

    miközben olvasta a sort
    do
    echo -e "$ line"
    find / home / myuser / dof "$ line" -exec readlink -f {};
    kész <testlist.txt Eddig elolvastam a fájlt, minden sorát, ami van, de nem tudom rávenni, hogy ezt a fájlt keresse meg, és kivonja az információkat, ha tudna segíteni, kérem, köszönöm. Egészségére

  3.   Pamela galaviz dijo

    Nagyon köszönöm a hozzájárulást 🙂

  4.   Mario Xavier dijo

    szia ... remélem, hogy segíthet a következő gyakorlatban ... Csomagolja ki a fájlt a tgz-ben a megadott könyvtárban, azon felül, hogy megadja a felhasználót és a csoportot minden létező könyvtárhoz és fájlhoz, valamint engedélyeket rendel hozzá a fájlokhoz és könyvtárakhoz
    megjegyzés: olvasásra és írásra kész fájlok
    könyvtárak végrehajtási engedélye

  5.   johnk dijo

    Az ARCH-DESTINATION egy olyan változó, amelyben el akarjuk menteni a célfájl elérési útját, redundancia érdekében. Ezután ehhez a változóhoz megadjuk a DESTINATION változót, amely a fenti tartalmazza a Documents mappa elérési útját, és hozzáadjuk a "változó" FILE fájlt, amely a fájl nevét tartalmazza. Ha ez a fájl például a list.doc lenne, akkor az ARCH-DESTINATION változó egyenlő lenne a /home/Usuario/Documentos/listado.doc

  6.   Használjuk a Linuxot dijo

    Ez az előző cikk. A címen érheti el http://usemoslinux.blogspot.com

    Ölelés! Pál.

  7.   Őszinte dijo

    Jó reggelt társ csak köszönöm, nagyon jó a blogod, de nem tudom megszerezni a Bash programozás első részét, ahol köszönet, üdvözlet

  8.   Saito Mordraw dijo

    Két rendkívüli rész, őszinte gratulációm.

    Egyszerűen csodálatos.

  9.   Fredy dijo

    Bien

  10.   Hugo dijo

    Szia, programot készítek egy CASE-val, mit akarok csinálni, és nem tudom, hogyan, például:

    echo Válasszon egy lehetőséget:
    visszhang
    visszhang 1. opció
    visszhang 2. opció
    visszhang 3. opció
    visszhang 4. opció
    visszhang 5. Kilépés
    olvasni var
    "$ var" eset
    1)
    echo "Az 1. lehetőséget választotta"
    ;;
    2)
    echo "A 2. lehetőséget választotta"
    ;;
    3)
    kidobta "… .."
    ;;
    4)
    kidobta "…".
    ;;
    5)
    kidobta "…"

    ;;
    *)
    "rossz opció" visszhang
    ;;
    hogy C

    ok, amit nem tudom, hogyan kell csinálni, az az, hogy amikor kiválasztom a 4. lehetőséget, amely kilép, kérdezd meg, hogy valóban ki akarok-e lépni, és adj nekem 2 lehetőséget Y & N

    a másik pedig az, hogy amikor az 1..5 számoktól eltérő dolgot választasz, ne szavazz rám a szkriptből ....

    Tudna segíteni köszönöm.

  11.   DAPAMA21 dijo

    Szia, 1 hónapja kezdtem el szkriptelni, és köszönöm a szkriptbejegyzéseidnek. Kb. 15-20-at tettem meg. Előre is köszönöm szépen. De most a tanárunk olyan munkát adott nekünk, amiben elakadtam. Mivel a tanár azt kérdezi:
    átadva egy könyvtárat, másolja át otthonába az összes fájlt, amelyek abban a könyvtárban vannak, ábécé sorrendben, és nevezze el fájlként1 fájl2 stb ... stb ... stb.
    Most a keresés vagy a keresés pillanatában vagyok, a find-ot akartam használni, de amikor hibakódot adtam neki, amint a dev null-ra tettem, az engedélyeket megtagadtam, akkor tévedek, és ide teszem a locate-t:
    keresse meg $ 1 | grep "/ $ {1} \ $"
    de természetesen ezzel mind kijönnek ...
    Nagyon köszönöm, ha elolvasta.
    Ha tudsz nekem segíteni, az nagy szívesség lenne.

  12.   luis dijo

    Szeretném, ha ebben segítene.
    1.-Írjon be egy egész számot a billentyűzeten, és kétszer jelenítse meg, és megháromszorozza ezt a számot a képernyőn. 2.- Készítsen egy programot annak eldöntésére, hogy a billentyűzet által beírt szám osztható-e 3-mal.
    3.- Készítsen egy programot az alábbiak összegének megkeresésére: ????????? ?????????????????? ????????? ⋯? ???????
    4.- Készítsen programot az 1 + 3 + 5 + 7 + 9 · · · + (2n + 1) összeg megtalálásához.
    5.-Készítsen egy programot, amely tízszer kinyomtatja a Linux szót a képernyőn
    6.-Készítsen egy programot, amely a felhasználó által megjelölt számú alkalommal kinyomtatja a képernyőn a Linux szót.
    7.-Adjon meg egy összeget órákban, és alakítsa át percekre és másodpercekre.
    8.-Számítsa ki a háromszög területét
    9.-Írjon be egy számot a billentyűzeten, majd ha 2-t ír be, akkor négyzetre, 3 kockára, 4-ről negyedikre és így tovább kell írni 6-ig.
    10-Számítsa ki a nyugdíjat, amelyet a hallgatónak fizetnie kell, meg kell adni a speciális kódot és a hátralékos napokat:
    KÓD
    KÜLÖNLEGESSÉG
    ÖSSZEG
    NAPI IDŐTARTAM
    1
    SZÁMÍTÁS
    160
    1
    2
    GONDOZÁS
    150
    1.5
    3
    TITKÁRSÁG
    140
    2
    4
    TURIZMUS
    180
    2.5
    5
    KÖNYVELÉS
    160
    1
    Meg kell mutatnia a tanulmányozott szakterületet, a nyugdíj költségét, a nemteljesítést és a fizetendő teljes összeget.

  13.   Charly dijo

    Helló, tud valaki segíteni?
    Szükségem van a következőre: "Kérjen három szót billentyűzettel, és ábécé sorrendben jelenítse meg A-tól z-ig"
    Bash vagy sh nyelven a LINUX porfaborrrr