Napisać skrypt "logowanie", który będzie symulował panel logowania systemu linux. Podawana ma być nazwa użytkownika (jawnie), a następnie hasło (ukryty text). W pliku "hasla", jeżeli jeszcze nie ma wpisu o podanym loginie i haśle należy dopisać te dane w postaci "login haslo" (różnica pomiędzy > a >>). Natomiast w pliku "informacje" należy przechowywać informacje o logowaniach tzw. logi, które posłużą do drugiej czesci zadania (forma dowolna według uznania programisty).
II część
Parametrami skryptu "logowanie" powinny byc informacje o tym kiedy zmienić hasło danego użytkownika (wywołać komendę passwd).
Zmiana hasła następuje po upłynięciu określonego w parametrze okresu czasu przykładowe wywolanie skryptu
./logowanie -g 2
oznaczać to będzie, że jeżeli ostatnie logowanie było conajmniej 2 godziny temu to należy zaproponować użytkownikowi zmianę hasła i uruchomić polecenie passwd.
Pozostałe opcje:
-d - dni
-g - godziny
-m - minuty
-s - sekundy
Problem. W warunku zaznaczonym na czerwono nie wiem dlaczego nie chce mi działać funkcja read i case a moim zdaniem wszystko jest poprawnie napisane i nie wiem jak to poprawić.
I jeszcze jedno w jaki sposób mogłabym zrobić nowe hasło do odpowiedniego loginu, ponieważ nie wiem jak zrobic zeby poprzednie hasło się skasowało i w jego miejsce było podane nowe hasło. Bo teraz mam zrobione poprostu że do pliku dopisywany jest ten sam login ale z innym hasłem.
Kod:
#!/bin/bash
echo -n "Login: "
read loginCtrl
echo -n "Haslo: "
read -s hasloCtrl
#echo "$(date +%s) $loginCtrl" >> informacje;
echo
#sprawdza czy plik z haslami istnieje
if [ ! -e hasla ]; then
>hasla
fi
if [ ! -e informacje ]; then
>informacje
fi
#sprawdza czy login został podany
if [ "$loginCtrl" == "" ]; then
echo "nieprawidlowy login"
exit 1
fi
#warunek ktory odczytuje dane z pliku, jeżeli nie znajdzie loginu to
#wykonywana jest klauzula else
grep $loginCtrl hasla | if read field1 field2; then
login=$field1
haslo=$field2
if [ "$login" == "$loginCtrl" ] && [ "$haslo" == "$hasloCtrl" ]; then
cat informacje | tail -n 1 | if read loginTime loginName; then
now=`date +"%s"`
lastlog=$(($now-$loginTime))
case "$1" in
"-d")
if [ $(($lastlog/86400)) -ge "$2" ]; then
./zmienhaslo
fi
;;
"-g")
if [ $(($lastlog/3600)) -ge "$2" ]; then
./zmienhaslo
fi
;;
"-m")
if [ $(($lastlog/60)) -ge "$2" ]; then
./zmienhaslo
fi
;;
"-s")
if [ $(($lastlog)) -ge "$2" ]; then
echo "Czy chcesz zmienic haslo?"
echo "t-tak n-nie"
read d
case "$d" in
"t")
echo "Podaj nowe haslo do $loginCtrl "
echo "Haslo: "
read -s hasloCtrl
if [ "$hasloCtrl" == "" ]; then
exit 3
fi
echo "$loginCtrl $hasloCtrl" >> hasla
echo "Nowe haslo do $loginCtrl zostalo utworzone"
;;
"n")
exit 2
;;
esac
fi
;;
*)
echo "zly parametr"
;;
esac
fi
echo $(date +%s) $loginCtrl >> informacje
fi
else
echo "$loginCtrl $hasloCtrl" >> hasla
echo "stworzone haslo dla uzytkownika $loginCtrl"
fi