superserek
Pozrzędzę trochę o sprawach technicznych. Rozumiem, że się uczysz, ale po co skrypt ma wykonywać niepotrzebną robotę i robić rzeczy naokoło?
COUNT= pgrep -x "Opera" | wc -l | tr -d "[:blank:]|[:space:]"
Uzupełnienie tego, co podał kolega
LordRuthwen:
Kod: Zaznacz cały
COUNT="$(pgrep -x "Opera" | wc -l | tr -d "[:blank:]|[:space:]")"
Ten fragment jest niepotrzebny:
Komenda
wc -l liczy linie z poprzedniego polecenia przed "rurą", dostajesz liczbę całkowitą. Nie ma z czego usuwać spacji i znaków tzw. białych. Po drugie "space" zawiera się w klasie "blank":
https://www.regular-expressions.info/posixbrackets.html .
ILE=0
declare -x COUNT
Te dwie rzeczy są niepotrzebne. Nie musisz dodatkowo deklarować zmiennej, ona już istnieje w tym skrypcie, została zdefiniowana. Po drugie - jeśli procesy Opery istnieją, dostaniesz ich listę. Jeśli nie ma, wynik będzie pusty.
Jeśli zrezygnujesz z liczenia (wc -l), można odpuścić w ogóle ubieranie tego w zmienną tylko wsadzić do warunku - reszta zależy od sygnału procesu "0" sukces - lub "1" błąd. Inna sprawa, że pgrep może zrobić to samo za pomocą własnej opcji. Jeszcze inaczej - masz pidof -s, on zwróci pojedynczy proces ... Możliwości jest od groma. Jak to skrócić? Komunikaty po
echo są nielogiczne - jest ZERO procesów, czyli ich nie ma.
Reasumując, wersja ze zmienną:
Kod: Zaznacz cały
#!/bin/bash
# set -x
COUNT="$(pgrep -x firefox -c)"
if ! [[ "$COUNT" == "0" ]]; then
echo "Jest"
else
echo "Nie ma"
fi
Wersja bez zmiennej:
Kod: Zaznacz cały
#!/bin/bash
# set -x
if [ "$(pidof -s chromium)" ]; then
echo "Jest"
else
echo "Nie ma"
fi