BASH zadania z kolokwium

Odpowiedz Nowy wątek
2019-09-17 21:29
0

Hejcia, przede mną i całą moją grupą 3 podejście do kolokwium zaliczającego Systemy Operacyjne i mamy problem ze skryptami w bashu. Otóż mamy zadania które za 1 razem teoretycznie zrobiliśmy ale nie były one tak jak prowadzący chciał i pokazał nam na dyżurze jak one powinny wyglądać ale jak przelałam do siebie te jego wypociny (XD) to i tak niekoniecznie to dobrze działa, mimo że próbowałam naprawić. Mam nadzieję, że jest tu ktoś kto jest w stanie mi pomóc :)

1. Wypisz imię nazwisko, każdego studenta piszącego z Tobą kolokwium oraz liczbę użytkowników, niekoniecznie zalogowanych, o tym samym imieniu.

#!/bin/bash

who | grep .188\\.146\\.163 | cut -f1 -d " " | uniq | while read login //ip do zmiany
do
    grep -a ^$login: /etc/passwd | cut -f5 -d: 
    imie = " $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d " " ))   //tu wywala blad
    grep $imie /etc/passwd | wc -l

done

2. Napisz skrypt, który wywołany w argumentem oznaczającym liczbę sekund zatrzyma sesję na ten właśnie czas (przez polecenie sleep), a potem wypisze nazwy plików, które tym czasie zostały usunięte z Twojego katalogu domowego (i jego podkatalogów). Przed wykonaniem i po wykonaniu polecenia sleep użyj polecenia date do wypisania aktualnego czasu.

#!/bin/bash

date
find ~ -type f > przed
sleep $1
date
cat przed | while read f
do
    if [-f $f]  //cos tu nie halo
    then 
        echo $f
    fi
done

cat przed

3. Dla PID podanego jako argument podaj listę procesów dla których jest on przodkiem.

#!/bin/bash

ps --ppid $$ -o pid
dz = $()
while [ -n "$dz" ]
do
    echo $dz
    dz2 = ""
    for dziecko in $dz
    do
        dz2 = "$dz2" $(ps --ppid $dziecko)
    done

    dz = "$dz2"
done
Jak chcesz to zrozumieć to zapraszam, wszystko wytłumaczę, znajdziemy co nie działa, itp. w ciągu jednej lekcji. - elwis 2019-09-18 01:48

Pozostało 580 znaków

2019-09-18 09:39
imie = " $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d " " ))   //tu wywala blad
dz = $()
dz2 = ""
dz = "$dz2"

Rozumiem pobudki estetyczne, jednakże tutaj spacje zmieniają znaczenie wyrażenia. Aby przypisać coś do zmiennej, nie możesz używać spacji wokół znaku =. Tylko taka forma jest poprawna.

if [-f $f]  //cos tu nie halo

Ponownie, spacje są istotne. Przy pisaniu warunków w skryptach, musisz mieć spacje przed i po [ oraz przed ] (dotyczy także bashowych [[ warunków ]]).

imie = " $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d " " ))   //tu wywala blad

Nie uciekasz cudzysłowów w środku stringa, w związku z czym wyrażenie jest interpretowane jako:

  1. imie
  2. =
  3. $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d
  4. )) string niezamknięty

Użyj \", aby umieścić cudzysłów w stringu, albo po prostu zapisz "wewnętrzny" string w apostrofach, zamiast cudzysłowach. Poza tym, masz nieparzystą liczbę cudzysłowów - brakuje zamykającego.

Pozostało 580 znaków

2019-09-18 10:56
0
Sensacyjny Sebastian napisał(a):
imie = " $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d " " ))   //tu wywala blad
dz = $()
dz2 = ""
dz = "$dz2"

Rozumiem pobudki estetyczne, jednakże tutaj spacje zmieniają znaczenie wyrażenia. Aby przypisać coś do zmiennej, nie możesz używać spacji wokół znaku =. Tylko taka forma jest poprawna.

if [-f $f]  //cos tu nie halo

Ponownie, spacje są istotne. Przy pisaniu warunków w skryptach, musisz mieć spacje przed i po [ oraz przed ] (dotyczy także bashowych [[ warunków ]]).

imie = " $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d " " ))   //tu wywala blad

Nie uciekasz cudzysłowów w środku stringa, w związku z czym wyrażenie jest interpretowane jako:

  1. imie
  2. =
  3. $(( grep ^_$user: /etc/passwd | cut -f5 -d: | cut -f1 -d
  4. )) string niezamknięty

Użyj \", aby umieścić cudzysłów w stringu, albo po prostu zapisz "wewnętrzny" string w apostrofach, zamiast cudzysłowach. Poza tym, masz nieparzystą liczbę cudzysłowów - brakuje zamykającego.

Dziękuję!!! ♥ O tych spacjach to muszę sobie zapisać gdzieś w widocznym miejscu, bo jak zawsze zapominam...

Pozostało 580 znaków

2019-09-18 11:15
1

Dla 2) proponuję rozwiązanie oparte o find + diff. Nie trzeba tak bardzo męczyć dysków ;)

find $HOME -type f | sort > snapshot1.txt - wyszuka pliki w katalogu domowym użytkownika i zapisze w snapshot1.txt, dzięki temu możesz zapisać do snapshot1.txt stan plików przed sleepem, zaś w snapshot2.txt stan plików po sleepie.

Za pomocą komendy diff snapshot1.txt snapshot2.txt możesz uzyskać informację o tym co się pojawiło, a co zniknęło.

edytowany 1x, ostatnio: yarel, 2019-09-18 11:16

Pozostało 580 znaków

2019-09-18 11:20
0
yarel napisał(a):

Dla 2) proponuję rozwiązanie oparte o find + diff. Nie trzeba tak bardzo męczyć dysków ;)

find $HOME -type f | sort > snapshot1.txt - wyszuka pliki w katalogu domowym użytkownika i zapisze w snapshot1.txt, dzięki temu możesz zapisać do snapshot1.txt stan plików przed sleepem, zaś w snapshot2.txt stan plików po sleepie.

Za pomocą komendy diff snapshot1.txt snapshot2.txt możesz uzyskać informację o tym co się pojawiło, a co zniknęło.

dokładnie tak większość osób zrobiła za 1. i za 2. razem a prowadzący powiedział tylko "ale nie o to mi chodziło" i nie zaliczał, mimo że działało... :(

edytowany 1x, ostatnio: Melsik, 2019-09-18 11:20
Pokaż pozostałe 3 komentarze
Ok, dzięki ^^ - Melsik 2019-09-18 12:23
@Melsik: chodziło mi nie o to "jak powinny wyglądać", ale "dlaczego akurat tak?". Może prowadzącemu chodziło o użycie jak największej liczby konstruktów bashowych, a nie o proste rozwiązania. A może jest po prostu betonem i lubi gnębić studentów :) - yarel 2019-09-18 13:01
@yarel: ja obstawiam, że jest betonem. Przykład potwierdzający tę tezę to Useless Use Of Cat w 2. - hauleth 2019-09-18 14:44
@hauleth: Też się skłaniam do takiego wniosku. Powiedziałbym, że potrójnym bétoném: 1 - usless cat, 2 - dyskryminacja rozwiązań i 3 - brak kryteriów oceny. - yarel 2019-09-18 14:53
@yarel: @hauleth tak,pewnie chce konstrukcje, pętelki itp. większość naokoło, i tak jest betonem XD - Melsik 2019-09-18 15:06

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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