Guida MikroTik
Primi passi e gestioneAvanzato

CLI avanzata: scripting, find, :foreach e variabili

Vai oltre i comandi singoli: variabili, cicli :foreach/:for, condizioni, find come lista, scheduler e script per automatizzare la gestione di un parco MikroTik.

Variabili: :local, :global, :set

Il linguaggio di scripting di RouterOS permette di automatizzare quasi tutto. Le variabili si dichiarano con :local (vivono solo nello script corrente) o :global (persistono tra script e sessioni). :set ne cambia il valore, :put le stampa. È la base per scrivere automazioni che leggono lo stato e agiscono di conseguenza.

Variabili e tipi base
# Variabile locale stringa e numerica
:local nome "AP-Zona1"
:local soglia 80

# Stampa a console
:put ("Apparato: " . $nome)

# Leggi un valore dalla configurazione in una variabile
:local cpu [/system/resource/get cpu-load]
:put ("CPU load: " . $cpu . "%")

# Variabile globale (persiste dopo la fine dello script)
:global ultimoCheck [/system/clock/get time]

Condizioni: :if

Eseguire azioni condizionali
# Allerta se la CPU supera la soglia
:local cpu [/system/resource/get cpu-load]
:if ($cpu > 80) do={
  :log warning ("CPU alta: " . $cpu . "%")
} else={
  :log info "CPU nella norma"
}

# Verifica se un'interfaccia è giù e logga
:if ([/interface/get ether1 running] = false) do={
  :log error "ether1 DOWN"
}

Cicli: :foreach e :for

Il vero potere arriva combinando find (che restituisce una lista di elementi) con :foreach: puoi iterare su tutte le secret PPPoE, su tutte le interfacce, su tutte le regole firewall ed eseguire un'azione per ciascuna. È così che si fanno le manutenzioni di massa in modo sicuro e ripetibile.

:foreach su una lista da find
# Logga ogni interfaccia ethernet che è DOWN
:foreach i in=[/interface/ethernet/find] do={
  :local nome [/interface/ethernet/get $i name]
  :local up   [/interface/ethernet/get $i running]
  :if ($up = false) do={
    :log warning ("Interfaccia DOWN: " . $nome)
  }
}

# Disabilita in blocco tutte le secret PPPoE con un certo profilo
:foreach s in=[/ppp/secret/find where profile="sospesi"] do={
  /ppp/secret/disable $s
}

# Ciclo numerico :for (es. ping a una serie di host)
:for n from=1 to=5 do={
  /ping ("192.168.88." . $n) count=1
}

Script salvati e scheduler

Gli script si salvano in /system/script e si eseguono a mano (/system/script/run nome), da un altro script, o automaticamente con lo scheduler (/system/scheduler) a intervalli o orari fissi. Insieme realizzano automazioni reali: backup notturni, controlli di salute, riavvii programmati, sincronizzazioni.

Script + scheduler: health check periodico
# Salva uno script che logga risorse e link WAN
/system/script/add name=health-check source={
  :local cpu  [/system/resource/get cpu-load]
  :local mem  [/system/resource/get free-memory]
  :local wan  [/interface/get ether1 running]
  :log info ("HEALTH cpu=" . $cpu . " freeMem=" . $mem . " wanUp=" . $wan)
  :if ($wan = false) do={ :log error "WAN DOWN!" }
}

# Eseguilo ogni 5 minuti
/system/scheduler/add name=sched-health interval=5m \
  on-event=health-check comment="health check ogni 5 min"

# Esecuzione manuale per test
/system/script/run health-check

print as-value: leggere dati in modo strutturato

Catturare l'output in una variabile
# as-value restituisce un array di proprietà, navigabile da script
:local lease [/ip/dhcp-server/lease/print as-value where status=bound]
:put [:len $lease]   ;# numero di lease attive

# Esempio: contare i clienti PPPoE attivi e loggarli
:local attivi [:len [/ppp/active/find]]
:log info ("Sessioni PPPoE attive: " . $attivi)
Quando uno script tocca firewall, indirizzi o secret in massa, prova SEMPRE prima con un :log/:put al posto dell'azione distruttiva, per vedere COSA verrebbe colpito. Esegui le modifiche di massa in Safe Mode quando lavori da remoto. Usa comment su script e scheduler per documentarli, e non mettere password in chiaro negli script: usa account dedicati con privilegi minimi e, dove serve, variabili globali impostate fuori dal file versionato.
scriptingscriptrouteros scriptvariabiligloballocalforeachforifwhiledoschedulerautomazionefindlogprint as-value

Configura senza fatica con l'AI

In WispOS l'agente AI genera la configurazione RouterOS dalle tue parole e un tutor ti guida passo passo.

Prova WispOS