Python o Bash per gli scripts?

Se devi ripetere tre (numero che può variare ma comunque non molto più grande di 3) volte la stessa sequenza di comandi conviene fare uno script. Nel mondo Linux (e Unix prima ancora) esistono diversi linguaggi di scripting, si può scegliere volta per volta il più adatto. Un caso simile è capitato proprio ieri, adesso racconto.

Mi serve un contatore per memorizzare successivamente log di elaborazioni. Ecco lo script Bash che ho prodotto:

x-num

#/bin/bash

FileName="$HOME/dep/elab-num"

if [ -e "$FileName" ]; then
  NUM=`cat $FileName`
else
  NUM=0
fi

NUM=$((NUM + 1))
echo $NUM > $FileName

echo $NUM # qui vanno i comandi veri

Il numero dell’ultima chiamata a x-num è memorizzato nel file ~/dep/elab-num. Lo script legge questo numero, lo incrementa di uno, aggiorna il file scrivendo il numero aggiornato e, in questo esempio, scrive sul terminale questo stesso numero. Nella versione vera qui vengono i comandi di elaborazione dei dati. Qualora il file di log non esista il numero dell’elaborazione viene assunto 0; quindi funziona anche in questo caso con indice 1.

Provo a testarlo:

OK, funziona.
Qui devo raccontare una cosa personale, mi è già capitata più volte, continua a capitare, anche ieri… Nello script non si può usare il carattwere ~ per indicare la home, bisogna usare $HOME, cosa che mi dimentico invariabilmente. Adesso che l’ho scritta chissà…

Ieri ero con un amico che è uscito con la solita domanda: “E per Windows come si fa?”

Bella domanda, io uso Python. E questo è l’equivalente Python del precedente

py-num.py

#!/usr/bin/python3

import os

home = os.getenv('HOME')

FileName = os.path.join(home, 'dep/elab-num')

if os.path.exists(FileName):
  with open (FileName, 'r') as f:
    num = int(f.readline())
else:
    num = 0

num += 1
with open (FileName, 'w') as f:
  print(num, file=f)

print(num)

Cancello il file del contatore per essere nelle stesse condizioni di prima ed ecco:

OK. I due scripts fanno esattamente la stessa cosa, possono essere usati in modo intecambiabile (con Linux).

Sono entrambi molto piccoli:

Quale preferire? Se è solo per me io sceglierei la versione Bash, ma sono gusti, l’abitudine (fin dagli anni ’80). La versione Python è però, previa modifica del nome del file, funzionante anche su Windows.

Probabilmente la variabile d’ambiente corrispodente a HOME credo sia HOMEPATH ma chi conosco opera differentemente impostando FileName = "c:/dep/elab-num.txt". Sì meglio specificare l’estensione, anche se di solito non si vede.

“Sai, queste cose si possono fare anche in Basic” (cit.). Certo 😋

🤩

Posta un commento o usa questo indirizzo per il trackback.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: