IF e WHILE

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

IF e WHILE

Messaggio da eugenia »

Salve a tutti, sono nuova sia del forum che del forum e non conosco tanto il bash scripting
Ho un vecchio PC che devo sostituire e li avevo un batch in DOS che devo sostituire con un PC più recente e con OS UBUNTU
Vorrei chiedervi una mano e/o consiglio su dove sto sbagliando
Spoiler
Mostra

$lim=3

readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

a=0
echo "#### risposta"
echo $readlog
echo "#### risposta"

while [ $a -eq $lim ]
do
a=$(($a+1))
if [ $readlog -eq 1 ]
then
echo "ok"
else
echo "repeat"
fi
echo "ho ripetuto?"
done
echo "continuo"
praticamente lim è il valore delle ripetizioni da fare, e readlog invce è una variabile che può avere che valore o 1 o 0.
Se è 1 è ok e si può procedere allo step successivo se è 0 devo ripetere per massimo 3 volte.
Sul vecchio BATCH usavo tanto il GOTO ma ho scoperto che su linux non esiste più, vabbè troverò una soluzione per sopperire
Grazie a chi mi dirà dove sto sbagliando
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 536
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu24@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: IF e WHILE

Messaggio da Lucio C »

Nonostante alcuni noti "GOTO considered harmful" e "csh considered harmful" https://en.wikipedia.org/wiki/Considere ... kin=vector, in Unix/Linux esiste una varieta' di shell e scripting languages al di la' di bash (che io non ho mai imparato, ne' ksh o zsh, ne' perl o python) p.es. csh e tcsh (che io uso) supportano GOTO. Che ciascuno usi cio' che trova piu' comodo.
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Grazie Lucio per la risposta, quindi devo provare ad installare tcsh e modificare quello che ho fatto (che ancora non ho capito perchè non funziona) e modificarlo in tsch.
Devo prima verificare se ci sono librerie che vanno in conflitto con la macchina, è un sistema molto instabile, ma preferirei installare il minimo perchè ho già testato e funziona senza grandi problemi ho solo questo ultimo scoglio
Provo e ti aggiorno
UgoBollito
Prode Principiante
Messaggi: 149
Iscrizione: mercoledì 26 gennaio 2022, 13:15
Desktop: Gnome
Distribuzione: 20.04
Sesso: Maschile

Re: IF e WHILE

Messaggio da UgoBollito »

Codice: Seleziona tutto

$lim=3
Quel $ ci va??

Codice: Seleziona tutto

while [ $a -eq $lim ]
Neanch'io so di bash, ma noto che $a l'hai messa = a zero e lim = a 3. Il ciclo così non viene eseguito.
Se è 1 è ok e si può procedere allo step successivo
Lo step successivo intendi all'interno di un ciclo?
Lucio C
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 536
Iscrizione: venerdì 10 dicembre 2021, 18:33
Desktop: fvwm
Distribuzione: (X)Ubuntu24@home; openSUSE42.3@work
Sesso: Maschile
Località: Paneropoli

Re: IF e WHILE

Messaggio da Lucio C »

eugenia ha scritto:
giovedì 12 dicembre 2024, 13:11
quindi devo provare ad installare tcsh e modificare quello che ho fatto
Devo prima verificare se ci sono librerie che vanno in conflitto con la macchina
1) non si DEVE fare nulla ... lo si fa se uno ha voglia e lo ritiene opportuno, dopo aver studiato un po' le man page o eventuali tutorial dei vari shell e affini. E' probabile che tcsh (con csh linkato ad esso) sia installato di default (verif. which csh, man csh).

2) non capisco quale problema di possa essefe tra librerie e shell(s).

In ogni caso csh ha come dice il nome una sintassi abbastanza simile al C. O abbastanza naturale (se fosse per me sarebbe ancora meglio se fosse simile al Fortran :D Per quello non ho mai imparato python e uso GDL come sostituto di IDL. Se fosse per me come scripting language rimpiango EXEC2 dell'IBM :D
The reasonable man adapts himself to the world: the unreasonable one persists in trying to adapt the world to himself. Therefore all progress depends on the unreasonable man. (G.B. Shaw)
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Ciao Ugo ho sbagliato sullo script non c'è la variabile è dichiarata cosi

Codice: Seleziona tutto

lim=3
Se è 1 è ok e si può procedere allo step successivo
Lo step successivo intendi all'interno di un ciclo?

Questa variabile se ha il valore di 1 allora la condizione dell'IF è vera
readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

if [ $readlog -eq 1 ]
Qui dichiaro a=0 ma poi lo incremento di 1 alla volta fino a 3
a=0
while [ $a -eq $lim ]
do
a=$(($a+1))
Il problema che non riesce a fare ne la condizione IF, perchè quando provo lo script e la condizione è falsa (readlog si valorizza 0 ) dovrebbe ripete all'infinito il ciclo IF fino a quando non si verifica che la condizione sia vera ( readlog si valorizza a 1)

Spero di essere stata chiara
Grazie per la collaborazione
UgoBollito
Prode Principiante
Messaggi: 149
Iscrizione: mercoledì 26 gennaio 2022, 13:15
Desktop: Gnome
Distribuzione: 20.04
Sesso: Maschile

Re: IF e WHILE

Messaggio da UgoBollito »

Ripeto che di bash so poco o nulla, ma visto che nessun esperto risponde, vado a intuito.
La condizione del while non è rispettata all'inizio ( 0 = 3 ??) quindi il codice esce subito al "done", almeno credo !
invece di

Codice: Seleziona tutto

while [ $a -eq $lim ]
do
...
done
dai solo

Codice: Seleziona tutto

while :
do
...
done
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Ho provato ieri sera ma non va, dopo ero stanca e sono andata a dormire

UgoBollito ha scritto:
giovedì 12 dicembre 2024, 21:10
Ripeto che di bash so poco o nulla, ma visto che nessun esperto risponde, vado a intuito.
La condizione del while non è rispettata all'inizio ( 0 = 3 ??) quindi il codice esce subito al "done", almeno credo !
invece di

Codice: Seleziona tutto

while [ $a -eq $lim ]
do
...
done
dai solo

Codice: Seleziona tutto

while :
do
...
done
UgoBollito
Prode Principiante
Messaggi: 149
Iscrizione: mercoledì 26 gennaio 2022, 13:15
Desktop: Gnome
Distribuzione: 20.04
Sesso: Maschile

Re: IF e WHILE

Messaggio da UgoBollito »

Ho provato a scrivere il pezzo codice in bash, dopo alcuni errori con gli spazi tra le parentesi e gli uguali :D
Comunque vedi se può andarti bene!
Lo script deve avere i permessi e poi lo esegui da terminale

Codice: Seleziona tutto

a=0
lim=3

# commento: /home/eugenia/log/$devmac.txt esiste? 
read_log=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

while :
do
if [ $read_log -eq 1 ]
then
echo "ok"
a=0
else
a=$(( $a + 1 ))
if [ $a == $lim ]
then
echo "ripeto $a"
break
fi
fi
done
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: IF e WHILE

Messaggio da rai »

Buonasera
un modo compatto (e più leggibile?) potrebbe essere usare un ciclo for che comunque esce dopo tre loop e si interrompe se readlog == 1.
Poi ci si comporta diversamente in base al valore di readlog fuori dal loop

Codice: Seleziona tutto

#! /bin/bash
for n in 1 2 3; do
    read -p "inserisci 0 o 1: " readlog  # questo equivale al readlog=$(grep connect01 /home/eugenia/log/$devmac.txt | wc -l)
    if [[ readlog -ne 1 ]]; then
        continue
    else
        break
    fi
done
if [[ readlog -eq 1 ]]; then
    echo "readlog vale 1: esecuzione di  <step successivo>"

else
    echo "fatti tre tentativi; readlog non vale 1: esecuzione di <altre cose>"
fi
Nell'ottica della "maintainability" del codice (che è uno dei motivi per evitare il GOTO quando si può),
Spoiler
Mostra
cioè quasi sempre
se si hanno grossi blocchi di codice da eseguire in un caso o nell'altro, li si possono mettere dentro delle funzioni da richiamare al bisogno:

Codice: Seleziona tutto

#! /bin/bash

se_1 () {
echo "readlog vale 1:
esecuzione dello  <step successivo>"
}

se_0 () {
echo "fatti tre tentativi; readlog non vale 1
esecuzione delle cose che succedono quando readlog non vale 1"
}

for n in 1 2 3; do
    read -p "inserisci 0 o 1: " readlog  # questo equivale al readlog=$(grep connect01 /home/eugenia/log/$devmac.txt | wc -l)
    read -p "inserisci 0 o 1: " readlog
    if [[ readlog -ne 1 ]]; then
        continue
    else
        break
    fi
done
if [[ readlog -eq 1 ]]; then
    se_1
else
    se_0
fi
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14024
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: IF e WHILE

Messaggio da thece »

:ciao:

volevo partecipare :D il mio piccolo contributo

Codice: Seleziona tutto

#!/bin/bash

MAX=3
COUNTER=0

echo "Begin"

# Simulo la tua lettura generando un numero intero casuale compreso tra 0 e 1
TEST=$(($RANDOM % 2))

while [[ $COUNTER -lt $MAX ]]; do

	echo "TEST: $TEST"
	echo "COUNTER: $COUNTER"

	if [[ $TEST -eq 0 ]]; then
		TEST=$(($RANDOM % 2))
		COUNTER=$((COUNTER + 1))
	else
		COUNTER=MAX
	fi

done

echo "End"

exit 0
@eugenia due suggerimenti:

- indenta il codice
- assegna alle variabili un nome più descrittivo del loro significato

queste due cose aumenteranno la comprensibilità del codice.
I'm #1 so why not try: sudo rm -rf / ?
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Grazie a thece, rai e UGO.
Ho provato ma non va.
Non so dove sto sbagliando, ho modificato anche i diritti perchè pensavo fosse quello.
Questo è quasi tutto il codice, mancano alcune variabili, ma funzionano tutte perchè se elimino la parte del ciclo ed if funziona, ma non prova le N volte.

Codice: Seleziona tutto


lim=3
cont=0

bluetoothctl  -- unblock $mac
sleep 1
bluetoothctl  -- connect $mac
sleep 1

readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

echo "#### risposta"
echo $readlog
echo "#### risposta"

for n in 1 2 3; do
        if [[ $readlog -ne 1 ]]; then
                        echo "Ripetere no connection"
						sudo python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt
                        continue
                else
                       break
                fi
done
         if [[ $readlog -eq 1 ]]; then
                        echo "ok esci dal ciclo e continua"
else
                        echo "fatti tre tentativi; readlog non vale 1: esecuzione di <altre cose>"
fi

sleep 1
bluetoothctl  -- disconnect $mac
bluetoothctl  -- block $mac

In pratica è una macchina che si connette via bluetooth ed invia comandi a delle sonde che rispondono con delle misurazioni.
Sono stanca ci sentiamo domani

PS: pare strano per me dire CICLO
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14024
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: IF e WHILE

Messaggio da thece »

eugenia ha scritto:
venerdì 13 dicembre 2024, 22:32
PS: pare strano per me dire CICLO
Loop ti piace di più?


L'indentazione del codice è sbagliata

Nello script non usare sudo, può riservare brutte sorprese. Se dovesse chiederti la password di amministrazione?
Se devi eseguire un comando come utente amministratore, allora esegui tutto lo script come utente amministratore

La variabile readlog non viene modificata all'interno del ciclo for.
Dopo la prima assegnazione

Codice: Seleziona tutto

readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)
il valore rimane costante. In pratica se vale 1 tutto ciò che sta dentro al ciclo non viene mai eseguito. Se vale 0 tutto ciò che sta dentro al ciclo viene eseguito sempre 3 volte.

Sei sicura che la variabile readlog possa assumere solo i valori 0 e 1, e non 0 e maggiore di 0?
Non so quale sia il contenuto del file txt. Forse l'if testa una condizione sbagliata.

L'istruzione continue non serve

Nell'if dentro al ciclo for basta girare la condizione e puoi eliminare il ramo else

La condizione if dopo il ciclo for per me non ha alcun senso

Sono solo osservazioni, magari sto solo leggendo un codice parziale (che non ho nemmeno la possibilità di provare)
Di seguito, ho solo riordinato un pò il codice, ma penso che sia ancora sbagliato

Codice: Seleziona tutto

bluetoothctl  -- unblock $mac
sleep 1

bluetoothctl  -- connect $mac
sleep 1

readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

echo "#### risposta"
echo $readlog
echo "#### risposta"

for n in 1 2 3; do

        if [[ $readlog -eq 1 ]]; then
                break
        fi

        echo "Ripetere no connection"
        python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt

done

if [[ $readlog -eq 1 ]]; then
        echo "ok esci dal ciclo e continua"
else
        echo "fatti tre tentativi; readlog non vale 1: esecuzione di <altre cose>"
fi

sleep 1
bluetoothctl  -- disconnect $mac
bluetoothctl  -- block $mac
Dovresti anche testare l'esito dei vari comandi bluetoothctl ... le cose possono sempre andare male ...
I'm #1 so why not try: sudo rm -rf / ?
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Buongiorno thece, non funziona.
Mi spiego meglio, io per simulare tolgo l'alimentazione alla sonda e lo script dovrebbe provare a far ricollegare per N volte dopo di che bypassa tutto.
Se la sonda la tengo accesa, la variabile readlog mi va a 1 e tutto funziona, anche il sudo

Codice: Seleziona tutto

bluetoothctl  -- power on

##########################TEST

bluetoothctl  -- unblock $mac
sleep 1
bluetoothctl  -- connect $mac
sleep 1
sudo python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt
sleep 1
readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

echo "#### risposta"
echo $readlog
echo "#### risposta"

for n in 1 2 3; do

	if [ "$readlog" -eq "1" ];
		 then
			echo "OK Connesso"
			break
		fi
			echo "Repeat"
			sudo python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt
done
	 if [ "$readlog" -eq "1" ];
		 then
                        echo "ok esci dal ciclo e continua"
else
			echo "fatti tre tentativi; readlog non vale 1: esecuzione di <altre cose>"
fi
    		echo "ho ripetuto?"
		echo "inizio rec"


sleep 1
bluetoothctl  -- disconnect $mac
bluetoothctl  -- block $mac

##########################TEST
Ho modificato la parte if perchè mi dava un problema, [[: not found, e andando a leggere ho visto che bisognava cambiare come ho fatto
Grazie

PS: si LOOP is better
Ultima modifica di eugenia il sabato 14 dicembre 2024, 12:12, modificato 1 volta in totale.
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14024
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: IF e WHILE

Messaggio da thece »

Frase di rito: come avrai sicuramente già visto in giro per il Forum, per rendere più comprensibile la discussione, dovresti formattare correttamente sia i comandi impartiti sia i relativi output racchiudendoli tra i tag [ code ] ... [ /code ] (scritti senza spazi) in modo da ottenere un qualcosa del genere

Codice: Seleziona tutto

COMANDO
...
OUTPUT
...
Puoi applicare i tag automaticamente selezionando il testo che vuoi racchiudere tra di essi e poi premendo il bottone </> (Codice) nella pulsantiera posta sopra il riquadro di scrittura.
Sei invitata a modificare il tuo precedente post.

Immagine


@eugenia formatta sempre il codice: non è importate, è fondamentale!

Codice: Seleziona tutto

bluetoothctl -- power on

##########################TEST

bluetoothctl -- unblock $mac
sleep 1

bluetoothctl -- connect $mac
sleep 1

sudo python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt
sleep 1

readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)

echo "#### risposta"
echo $readlog
echo "#### risposta"

for n in 1 2 3; do

	if [ "$readlog" -eq "1" ]; then
		echo "OK Connesso"
		break
	fi

	echo "Repeat"
	sudo python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt

done

if [ "$readlog" -eq "1" ]; then
	echo "ok esci dal ciclo e continua"
else
	echo "fatti tre tentativi; readlog non vale 1: esecuzione di <altre cose>"
fi

echo "ho ripetuto?"
echo "inizio rec"

sleep 1

bluetoothctl -- disconnect $mac
bluetoothctl -- block $mac

La variabile readlog continua a non cambiare il suo valore all'interno del loop for, quindi tanto vale testarne il valore fuori dal loop e poi eseguire il loop se e solo se si verifica la condizione corretta

Codice: Seleziona tutto

...
readlog=$(cat /home/eugenia/log/$devmac.txt | grep connect01 | wc -l)
if [ "$readlog" -ne "1" ]; then
	for n in 1 2 3; do
		python3 $path01 /hfp/org/bluez/hci0/$devmac > /home/eugenia/log/$devmac.txt
	done
fi
...
I'm #1 so why not try: sudo rm -rf / ?
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: IF e WHILE

Messaggio da rai »

Ho modificato la parte if perchè mi dava un problema, [[: not found, e andando a leggere ho visto che bisognava cambiare come ho fatto
@eugenia non dovresti avere quell'errore eseguendo il tuo script in una shell bash come dicevi nel primo post; forse il tuo script viene eseguito da cron, udev o altri demoni che hanno come shell predefinita sh?

Non è indispensabile ma per sfruttare qualcuna delle funzionalità avanzate presenti in bash ma non in sh, puoi mettere nel primo rigo dello script la sequenza di caratteri #! /bin/bash
che istruisce il sistema operativo ad eseguire il codice successivo con l'interprete bash. Questo, ammesso che lo script abbia già i permessi di esecuzione.

Insisto su questo punto perché penso che sia causa del malfunzionamento: se usi bash e per il test usi [[ allora puoi testare l'uguaglianza con == altrimenti dentro il test fatto con [ devi testare l'uguaglianza tra stringhe con =


Sul fatto che il continue non serve ha ovviamente ragione @thece : il ciclo si ripeterà comunque, basta occuparsi di farlo uscire col break quando serve.
Non sono d'accordo invece sulla inutilità di verificare la variabile test all'uscita del loop, altrimenti bisognerebbe eseguire il blocco `step_successivo' _dentro_ il loop, subito prima del break.
Concordo ancora sul fatto che usare sudo dentro lo script sia _sbagliato_, che è essenziale una corretta indentazione e formattazione del codice, che è molto utile una appropriata denominazione delle variabili...

Faccio una puntualizzazione utile a una che vuole avanzare nell'uso della shell: quando scrivi

Codice: Seleziona tutto

cat /un/nome/file | grep "un pattern" | wc -l
potresti risparmiare l'esecuzione di un processo scrivendo direttamente

Codice: Seleziona tutto

grep "un pattern" /un/nome/file | wc -l
Avatar utente
thece
Tenace Tecnocrate
Tenace Tecnocrate
Messaggi: 14024
Iscrizione: lunedì 23 aprile 2007, 14:16
Distribuzione: Debian 12 (Bookworm) - KDE

Re: IF e WHILE

Messaggio da thece »

rai ha scritto:
sabato 14 dicembre 2024, 18:59
Non è indispensabile ma per sfruttare qualcuna delle funzionalità avanzate presenti in bash ma non in sh, puoi mettere nel primo rigo dello script la sequenza di caratteri #! /bin/bash
Uhm ... pensando che @eugenia avesse pubblicato solo uno stralcio del suo script, io questa cosa l'ho data per scontata.
thece ha scritto:
venerdì 13 dicembre 2024, 23:26
La condizione if dopo il ciclo for per me non ha alcun senso
rai ha scritto:
sabato 14 dicembre 2024, 18:59
Non sono d'accordo invece sulla inutilità di verificare la variabile test all'uscita del loop , altrimenti bisognerebbe eseguire il blocco `step_successivo' _dentro_ il loop, subito prima del break.
Magari mi sono espresso male: non pensavo ad inutile , piuttosto non ne capivo lo scopo ...
I'm #1 so why not try: sudo rm -rf / ?
eugenia
Prode Principiante
Messaggi: 7
Iscrizione: mercoledì 11 dicembre 2024, 21:58
Sesso: Femminile

Re: IF e WHILE

Messaggio da eugenia »

Buonasera a tutti oggi non ho avuto tempo, vedo domani di lavorarci.
Comunque il primo rigo è d'obbligo e c'è sempre stato

Codice: Seleziona tutto

#! /bin/bash
La variabile readlog è un modo molto semplice, per me, per capire se il device è connesso.
Se la variabile è 1 vuol dire che nel file txt c'è il testo connect01, il file si genera ogni volta ed è diverso da ogni device.
Purtroppo non ho trovato nulla con cui è possibile fare un check (verificare la connessione) e poi proseguire con i comandi che inviano i dati dalle sonde quindi devo usare quel metodo per capire se la sonda è connessa.
Questa è una macchina vecchia e devo sostituirla con questa e con OS linux.
Rileggendo tutti i post e con i test che ho fatto penso di usare una soluzione tipo funzioni (dovrò studiarla un po) proposta da rai.
Comunque vi aggiorno appena trovata la soluzione.
Forse chiederò qualche delucidazione sulle funzioni
rai
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 2909
Iscrizione: domenica 11 maggio 2008, 18:03
Desktop: plasma
Distribuzione: 22.04
Località: Palermo

Re: IF e WHILE

Messaggio da rai »

Bene, ora sappiamo che lo script potrebbe essere eseguito da bash ma ancora non ci hai detto come _in_effetti_ viene lanciato.
Comunque, visto che per decidere le sue scelte lo script cerca in un output ogni volta riscritto l'assenza o presenza di una stringa, conviene bypassare la difficoltà che hai con la verifica e riscrivere l' if in questo modo:

Codice: Seleziona tutto

if grep -q connect01 /home/eugenia/log/$devmac.txt; then
    <blocco da eseguire se c'è connessione>
else
    <azioni alternative>
fi
per chiarimenti vedi l'opzione -q nel manuale di grep


Tra l'altro si potrebbe ridurre (di molto) l'overhead legato all'IO e leggere direttamente lo stdout:

Codice: Seleziona tutto

if python3 $path01 /hfp/org/bluez/hci0/$devmac | grep -q connect01; then
    <blocco da eseguire se c'è connessione>
else
    <azioni alternative>
fi
ma qui sarebbe meglio vedere il codice dello script python
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 10 ospiti