Ubuntu 20 sieciowy [MK, 20/21]
Lekcja 17. Edytor   Moduły jądra i zarzą...
Skrypty powłoki systemu Linux

Skrypty powłoki systemu Linux

Aby utworzyć skrypt powłoki w systemie Linux należy wykonać poniższe kroki:
  1. Utworzyć plik i za pomocą dowolnego edytora tekstu wpisać do pliku polecenia, które mają zostać wykonane
  2. Po skończonej edycji należy mu nadać uprawnienia do wykonywania dla odpowiednich użytkowników
  3. Uruchomić skrypt według schematu: ./skrypt.sh
Zasady pisania kodu w skryptach powłoki:
  • pierwsza linijka kodu musi wskazywać jakiej powłoki będzie używał skrypt do wykonywania poleceń, np. zapis #!/bin/bash oznacza, że kod w tym pliku będzie wykonany przez powłokę bash
  • znak # oznacza początek linii komentarza
  • polecenie echo służy do wypisania tekstu na konsoli
  • polecenie read czyta ze standardowego wejścia wiersz zakończony klawiszem ENTER
  • w skrypcie można tworzyć zmienne lokalne (program variables) według schematu var=12 (bez spacji) i odwoływać się do nich poprzedzając ich nazwę znakiem $
  • w skrypcie można używać zmiennych specjalnych (special variables): $0 – nazwa skryptu, $1 ... $9 – parametry przekazane do skryptu, $# – liczba parametrów przekazanych do skryptu
  • w skrypcie można używać zmiennych środowiskowych (environment variables): $HOME – ścieżka folderu domowego użytkownika, $USER – nazwa użytkownika, $HOSTNAME – nazwa hosta, $OSTYPE – rodzaj systemu operacyjnego
Instrukcje warunkowe i sterujące w skryptach powłoki:
  • instrukcja warunkowa if else, przykład:
    if [[ $(id -u) == „0” ]];
    then
         echo „Jestem root-em”
    else
         echo „Niestety, żyję jako zwykły użytkownik...”
    fi
    
  • instrukcja warunkowa case, przykład:
    case "$liczba" in
        "1"|"2")    echo "Zmienna liczba ma wartość 1 lub 2.";;
        "3")        echo "Zmienna liczba ma wartość 3.";;
        *)          echo "Zmienna liczba ma wartość większą od 3.";;
    esac
    
  • pętla for, przykład:
    for x in jeden dwa trzy ; do
        echo "To jest $x"
    done
    

Definicje

  • Definicja 1.
    Co to jest skrypt powłoki Linux?
  • Aby zobaczyć tą treść musisz być zalogowany

Pytania

  • Pytanie 1.
    Jaki znak lub znaki oznaczają początek linii komentarza w skrypcie Bash?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 2.
    Co w skryptach Bash zawiera zmienna specjalna $0?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 3.
    Co w pierwszej linijce skryptu Bash oznacza zapis #!/bin/bash?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 4.
    Co zawiera zmienna środowiskowa $OSTYPE ?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 5.
    Co w skryptach Bash zawiera zmienna specjalna $#?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 6.
    Jakie uprawnienia powinien mieć skrypt Bash, aby był plikiem wykonywalnym dla właściciela pliku?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 7.
    Co powinno znajdować się w pierwszej linijce skryptu powłoki Bash?
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 8.
    Jakie inne powłoki, oprócz Bash, są dostępne w systemach Linux
  • Aby zobaczyć tą treść musisz być zalogowany

  • Pytanie 9.
    Jaka powinna być poprawna składnia instrukcji if sprawdzającej czy plik istnieje?
  • Aby zobaczyć tą treść musisz być zalogowany

Zadania

Zadanie 1. #
Utwórz skrypt powłoki bash przyjmujący jako parametr dowolne imię. Skrypt ma wyświetlić na konsoli komunikat w stylu: Witaj imię!.

Zadanie 2. #
Napisz skrypt, który zwróci liczbę aktualnie zalogowanych użytkowników.

Zadanie 3. #
Napisz skrypt, który będzie zwracał sumę dwóch liczb podanych w parametrach skryptu.

Zadanie 4. #
Napisz skrypt powłoki wyświetlający prośbę o podanie dowolnej liczby z zakresu od 1 do 7. Gdy zostanie podana wartość z poza tego zakresu, skrypt ma wyświetlić komunikat: podałeś liczbę w złym zakresie i zakończyć swoje działanie. W przeciwnym wypadku skrypt ma wyświetlić nazwę dnia tygodnia opowiadający podanej liczbie.

Zadanie 5. #
Napisz skrypt sprawdzający, którą mamy teraz godzinę. Po wydobyciu tej informacji poleceniem date +%h użyj instrukcji warunkowej if else i wyświetl odpowiednie komunikaty, kiedy jest
  • przed 12-stą
  • przed 17-stą
  • przed 21-stą
  • po 21-ej

Zadanie 6. #
Wykorzystując pętlę for napisz skrypt powłoki, który będzie obliczał sumę kontrolną md5 dla wszystkich plików w bieżącym katalogu. Skorzystaj z polecenia md5sum oraz instrukcji sprawdzającej czy dany element w bieżącym katalogu jest plikiem: if [ -f "$filename" ];then

Zadanie 7. #
Napisz skrypt korzystający z powłoki bash, który będzie wyświetlał iloczyny liczb od 0 do 10 z liczbą podaną jako argument skryptu. Dodatkowo skrypt ma sprawdzać czy przy jego wywołaniu podano argument. Jeśli nie, to skrypt powinien wyświetlić komunikat, podać prawidłową składnię wywołania (np. ./mnozenie.sh liczba) i zakończyć swoje działanie. Liczbę argumentów skryptu przechowuje zmienna specjalna $#.

Zadanie 8. #
Napisz skrypt, który będzie prosił o podanie liczby z zakresu od 0 do 100. Skrypt ma za zadanie odjąć liczbę podaną przez użytkownika z losową liczbą wygenerowaną poleceniem shuf i zwrócić tą różnicę.

Zadanie 9. #
Utwórz skrypt w linuksowej powłoce Bash, który utworzy katalog o nazwie zsi i doda do tego katalogu 100 plików z nazwami według wzorca plik_numer.txt, gdzie numer będzie liczbą z zakresu od 1 do 100. Dodatkowo każdy z plików ma zawierać dowolną zawartość.

Zadanie 10. #
Napisz skrypt uruchamiany w powłoce Bash, który zamieni liczbę na jej zapis słowny, np. po podaniu jako argument liczby 12, skrypt ma wyświetlić słowo dwanaście i zakończyć działanie. Załóż ograniczenie dla liczb z przedziału od 0 do 99. Po wpisaniu liczby z poza tego zakresu lub ciągu znaków nie będących liczbą, należy wypisać komunikat: Podana liczba jest w nieprawidłowym zakresie.

Zadanie 11. #
Utwórz plik avengers.c z następującym kodem:
#include <stdio.h>

int main()
{
    int n, i;
    float sum = 0, x;

    printf("Dla ilu liczb chcesz policzyć średnią?  ");
    scanf("%d", &n);
    printf("\nWpisz %d liczb, zatwierdzając każdą klawiszem ENTER\n", n);
    for(i = 0; i < n; i++)
    {
        scanf("%f", &x);
        sum += x;
    }
    printf("\nŚrednia arytmetyczna podanych liczb to %f\n", (sum/n));
    return 0;
}
Następnie skompiluj plik poleceniem gcc avengers.c -o avengers i wywołaj komendą ./avengers.

Zadanie 12. #
Utwórz plik optimus_prime.c z następującym kodem:
#include<stdio.h>

int main()
{
    int n,i = 3, count, c;

    printf("\nIle liczb piewszych potrzebujesz? ");
    scanf("%d", &n);

    if(n >= 1)
    {
        printf("\n\nOto Twoje %d liczb pierwszych:  ", n);
        printf("2 ");
    }

    for(count = 2; count <= n; i++)  
    {
        for(c = 2; c < i; c++)
        {
            if(i%c == 0)
                break;
        }

        if(c == i)  
        {
            printf("%d ", i);
            count++;   
        }
    }
    return 0;
}
Następnie skompiluj plik poleceniem gcc optimus_prime.c -o optimus_prime i wywołaj komendą ./optimus_prime.

Zadanie 13. #

Utwórz, skompiluj i uruchom w systemie Ubuntu, prosty kod w języku C, który wypisze kolejne wyrazy ciągu Fibonacciego. Do skompilowania kodu mogą być potrzebne dodatkowe pliki. Zainstaluj je poleceniem:

sudo apt-get install build-essential

Następnie utwórz katalog fibonacci, a w nim plik fibonacci.c z następującym kodem:

#include <stdio.h>
 
int main()
{
  int n, first = 0, second = 1, next, c;
 
  printf("Podaj liczbę wyrazów ciągu\n");
  scanf("%d", &n);
 
  printf("Pierwsze %d wyrazów ciągu Fibonacciego to:\n", n);
 
  for (c = 0; c < n; c++)
  {
    if (c <= 1)
      next = c;
    else
    {
      next = first + second;
      first = second;
      second = next;
    }
    printf("%d\n", next);
  }
 
  return 0;
}

Skompiluj plik poleceniem gcc fibonacci.c -o fibonacci, a następnie wywołaj komendą ./fibonacci.

Zadanie 14. #

Utwórz, skompiluj i uruchom w systemie Ubuntu, prosty kod w języku C++, który zamieni miejscami dwie zmienne. Do skompilowania kodu mogą być potrzebne dodatkowe pliki. Zainstaluj je poleceniem:

sudo apt-get install build-essential

Następnie utwórz katalog swap, a w nim plik swap.cpp z następującym kodem:

#include <iostream>
using namespace std;

int main()
{
    int a = 5, b = 10, temp;

    cout << "Przed zamianą." << endl;
    cout << "a = " << a << ", b = " << b << endl;

    temp = a;
    a = b;
    b = temp;

    cout << "\nPo zamianie." << endl;
    cout << "a = " << a << ", b = " << b << endl;

    return 0;
} 

Skompiluj plik poleceniem g++ swap.cpp -o swap, a następnie wywołaj komendą ./swap. A teraz spróbuj osiągnąć ten sam efekt bez używania pomocniczej zmiennej temp.

2019-01-01 11:31:51 2021-09-24 22:14:14


© 2024 Młody Informatyk v. 0.1.7717