Strona 2 z 2

: 06 kwietnia 2013, 23:11
autor: nyx
Witam.

Proszę o małą radę z rozgryzieniem pewnego tematu.

Mam plik tekstowy, który zawiera tekst:

Kod: Zaznacz cały

/input,BCs/%S1%_%S2%_%S3%s_temp,mac
/input,BCs/%S1%_%S2%_%S3%s_press,mac

Chcę "powyciągać" znaki, które znajdują się pomiędzy % i robię to tak:

Kod: Zaznacz cały

awk -F "%" '{print $2}' | sort -u `
Program zwraca mi tylko jedną wartość np.: S1 a pozostałe pomija.
Co robię źle?

Dodane:
Witam.

Chciałem się z Wami podzielić pewnym skryptem jaki napisałem do wyłączania komputera po określonym czasie bezczynności.

Chętnie przeczytam opinię o nim i może komuś się przyda.

Opis:
Zadaniem skryptu jest wyłączenie komputera po określonym czasie bezczynności, o ile w tle nie działają żadne programy które wykluczają wyłączenie.

W skrócie często mi się zdarza pracować do późna i zasypiałem przed komputerem. Chciałem aby komputer sam się wyłączył po określonej bezczynności, nie chciałem jednak by wyłączał się zawsze.

Zależało mi bowiem aby niektóre programy uniemożliwiły wyłączenie tak aby po ich włączeniu komputer mógł iść cały czas.

Zatem napisałem poniższy skrypt. Fakt jest on bardzo prosty ale działa i w sumie to mój pierwszy skrypt który robi coś konkretnego. Jeśli macie pomysł na jego usprawnienie chętnie przeczytam.

Na wstępie definiujemy czas bezczynności oraz programy (mnie trzy wystarczyły), które mają uniemożliwić wyłączenie.
Po pewnym czasie skrypt komunikuje za pomocą komendy beep, że nastąpi wyłączenie komputera tak aby móc jeszcze ruszyć myszką i go odroczyć.

Czas bezczynności określa na podstawie programu "xprintidle".

Kod: Zaznacz cały

#!/bin/bash


log_path=/tmp/idletime.log #sciezka do zapisu logu
il_min=40 #podaj czas w minutach do wylaczania komputera
il_ms=60000 # zapis 1 min w milisekundach
il_all=$[ il_min*il_ms ] # zamiana minut na milisekundy
il_all_add=$[ 2*il_ms ]  # czas wymagany do dogrywki


prog_1="vlc" #podaj nazwe programu do wykluczenia
prog_2="" #podaj nazwe programu do wykluczenia
prog_3="" #podaj nazwe programu do wykluczenia


prog_1_status=`/bin/ps aux | egrep "$prog_1" | egrep "(Sl)"`
prog_2_status=`/bin/ps aux | egrep "$prog_2" | egrep "(Sl)"`
prog_3_status=`/bin/ps aux | egrep "$prog_3" | egrep "(Sl)"`




if  [ "$prog_1_status" ];
then
echo "uruchomiono program" $prog_1  $prog_1_status >> $log_path
prog_status=1
fi
if  [ "$prog_2_status" ];
then
echo "uruchomiono program" $prog_2  $prog_2_status >> $log_path
prog_status=1
fi
if  [ "$prog_3_status" ];
then
echo "uruchomiono program" $prog_3  $prog_3_status >> $log_path
prog_status=1
fi


idletime=`/usr/bin/xprintidle`


/bin/date  +%T >> $log_path
echo "ilosc milisekund :" $idletime >> $log_path

if  [ "$idletime" -ge "$il_all" ] ;
then
    if [ "$prog_status" -eq 1 ];
    then
    echo "programy wykluczajace sa uruchomione" >> $log_path
    else
    echo "idletime wymagany do wylacznia komputera ostrzezenie o wylaczeniu" >> $log_path
    beep
    beep
    sleep 1m
    
    idletime_new=`/usr/bin/xprintidle`
    
        if  [ "$idletime_new" -ge "$il_all_add" ] ;
        then
        echo "uwaga wylaczenia komputera" >> $log_path
        sudo shutdown -h now
        fi
    fi
        
else 
echo "idletime za maly do wylaczenia komputera" >> $log_path
fi


Czekam na opinie.