Witam, zacząłem zabawę z Bashem, i zrobiłem prosty bot GG w EKG który odpowiada na komendy. Wszystko ładnie działa, ale chce zrobić aby ten skrypt ignorował jeden numer GG,
myślałem już nad tym:
case $1 in
IGNOROWANY_NUMER)
if ["$2" = "uptime"]; then
echo "Uptime :> "
eval 'w'
fi
;;
*)
W tym małym skrypcie pokazałem że komenda “uptime” jest pokazywana tylko dla Ignorowanego numeru, a jak zrobić aby każdy inny numer mógł używać tej komendy a ignorowany numer nie? Pozdrawiam. PYTANIE 2 A i żeby nie zakładać nowego wątku to mam drugie pytanie związane z tym pytaniem. Jak zrobić więcej warunków w jednej linii?
Należy pamiętać, że ‘[’ jest nazwą programu. Zarówno jest to polecenie wewnętrzne(wbudowane), jak i oddzielna binarka. if sprawdza czy $? (kod powrotu zwrócony przez zadanie, które ostatnio zakończyło się na pierwszym planie) jest równy 0.
W takim przypadku proszę pamiętać, że możemy stosować &&, jak również || .
Czyli:
if ["a" == "a"] && ["b" == "b"]; then echo a; fi
– Dodane 16.12.2010 (Cz) 16:40 –
function has_only() { b=$1; shift; for a in $*; do echo $a == $b; if [$a != $b]; then return 1; fi; done; return 0; }
Sposób użycia:
if has_only $powtarzany $data0 $data1 $data2; then zrob_cos; fi
Dzięki, niestety nie działa && ale za to działa || więc jest dobrze Mam teraz drugie malutkie pytanko da się zrobić aby, jak ktoś wpisał “Test wyraz” a mam zapisane tylko “test” to żeby też wyświetlało mu w tym przypadku słowo “ok”
if ["$2" = "test"]; then
echo "ok"
już nawet próbowałem dopisać * w ["$2" = “test*”]; then ale trzeba było napisać test* aby pokazało tekst.
cos=$(echo $2 | grep test | wc -l)
if ["$cos" = "1"]; then
echo "ok"
fi
Widzę że muszę ci trochę objaśnić, a więc pierwsza linia przypisuje wynik echo $2 | grep test | wc -l do zmiennej cos, a echo $2 służy do przekazania wartość zmiennej 2 do programu grep który służy do sprawdzania czy w linii której dostał jest słowo test, jeżeli jest to całą linię przekazuje tą linię do programu wc, który ma zliczyć linie, czyli wynik całego tego polecenia będzie 1 jeżeli w zmiennej 2 jest słowo test, a jeżeli nie ma to da nam wynik 0, taka sobie logika binarna .
BADWORTS=("wpisujesz" "słowa" "które" "chcesz")
for slowo in "${BADWORTS[@]}"; do
cos=$(echo $2 | grep $slowo | wc -l)
if ["$cos" = "1"]; then
echo "ok"
fi
done
Dokładnie ci nie powiem jak ta pętla działa, przynajmniej do tego co jest wewnątrz niej po kolej przypisuje do zmiennej slowo po kolei wszystko z zmiennej BADWORTS, skopiowałem ją z skryptów startowych arch.
BADWORTS=("test" "tost" "testa" "testa")
for slowo in "${BADWORTS[@]}"; do
cos=$(echo $2 | grep $slowo | wc -l)
if ["$cos" = "1"]; then
echo "ok"
fi
done