Pisanie skryptu w bashu - użycie awk.

0

Witam!

echo "Wypisywanie danych dotyczacych uzytkownika o podanym UID."

if [ -z $1 ]; then
        echo "Prosze podac UID: "
        read NUMER
        echo "Podany UID to: $NUMER"
else
        NUMER=$1
        echo "Podany UID to: $NUMER"
fi

KOLUMNA=`cat /etc/passwd | awk '{ if ($3 == $NUMER) print $5 }'`

echo "Wynik dzialania programu: $KOLUMNA"

Chciałbym zrobić to w taki sposób, aby awk przeszukiwało plik passwd w poszukiwaniu UID o wartości wprowadzonej w trakcie działania skryptu, a następnie wypisało 5 kolumnę odpowiadającą temu numerowi. Problem jest z użyciem tej zmiennej NUMER w podstawionym poleceniu - nie do końca wiem jak to zrobić.

Z góry dziękuję za pomoc!

1

Spróbuj tak:

KOLUMNA=`cat /etc/passwd | awk '{ if ($3 == '"$NUMER"') print $5 }'`

Shell podstawi wartość zmiennej zanim kod trafi do awk.

I wydaje mi się, że w /etc/passwd separatorem jest dwukropek więc:

KOLUMNA=`cat /etc/passwd | awk -F : '{ if ($3 == '"$NUMER"') print $5 }'`
0

Skrypt już nie krzyczy jak go próbuję uruchomić, ale w dalszym ciągu nie działa.
A mianowicie, dla argumentu 0 powinien wypisać roota - czego nie robi.

./uid 0
Wypisywanie danych dotyczacych uzytkownika o podanym UID.
Podany UID to: 0
Wynik dzialania programu:
0

Wklej niedziałający kod. U mnie działa ok :)

0

Okej, działa. Musiałem chyba na początku coś źle przepisać. :)
Jeszcze gwoli ścisłości, żebym mógł sobie wszystko usystematyzować.
Dlaczego włączenie zmiennej między

' '

sprawia, że najpierw podstawiana jest zmienna? Rozumiem, że musi być hierarchia (jak w każdym innym języku), ale chciałbym po prostu poznać mechanizmy tej hierarchii.

0

Shell podstawia Ci wartości zmiennych w tekście zapisanym w cudzysłowie. Nie robi tego w przypadku tekstu w apostrofach.
W Twoim przypadku chcesz żeby shell nie dotykał $3 i $5, bo to fragment skryptu dla awk. Natomiast zmiennej $NUMER chcesz użyć w standardowy sposób (podstawić jej wartość w miejsce wystąpienia $NUMER).

Sprawdź sobie:

kolor='zielony'
echo $kolor
echo "$kolor"
echo '$kolor'

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