bash: bash bash_Input_and_output


Input Control

Per avere un programma che esegua le istruzioni che vogliamo noi possiamo utilizzare le funzioni di input control che fanno si che prima di effettuare determinate operazioni sia l’utente ad indirizzare un percorso e non solo il codice. Molti programmi funzionano in questo modo come per esempio SET, Bettercap, Recon-NG, ecc.

# Available options
<SNIP>
echo -e "Additional options available:"
echo -e "\t1) Identify the corresponding network range of target domain."
echo -e "\t2) Ping discovered hosts."
echo -e "\t3) All checks."
echo -e "\t*) Exit.\n"
 
read -p "Select your option: " opt
 
case $opt in
	"1") network_range ;;
	"2") ping_host ;;
	"3") network_range && ping_host ;;
	"*") exit 0 ;;
esac

Le prime linee di echo servono come menu di visualizzazione per le opzioni a nostra disposizione. Con il comando read viene visualizzata la riga con “Seleziona la tua opzione:” e l’opzione aggiuntiva -p garantisce che il nostro input rimanga sulla stessa riga. Il nostro input viene memorizzato nella variabile opt, che poi utilizziamo per eseguire le funzioni corrispondenti con l’istruzione case. A seconda del numero immesso, l’istruzione case determina quali funzioni vengono eseguite.

Output Control

Può capitare che l’esecuzione di determinate operazioni impieghino parecchio tempo per essere eseguite e siccome è inefficiente stare lì ad aspettare che finisca l’esecuzione bash ci fornisce un’opzione per salvare l’output in un file a nostra scelta, nel seguente caso tramite la funzione tee creeremo 2 file, quello con la flag tee -a aggiunge l’output al file indicato (la -a sta per append), mentre quello senza la flag -a crea un nuovo file o distrugge il file citato con l’output inviatogli:

# Identify Network range for the specified IP address(es)
function network_range {
   for ip in $ipaddr
   do
   	netrange=$(whois $ip | grep "NetRange\|CIDR" | tee -a CIDR.txt)
   	cidr=$(whois $ip | grep "CIDR" | awk '{print $2}')
   	cidr_ips=$(prips $cidr)
   	echo -e "\nNetRange for $ip:"
   	echo -e "$netrange"
   done
}
 
<SNIP>
 
# Identify IP address of the specified domain
hosts=$(host $domain | grep "has address" | cut -d" " -f4 | tee discovered_hosts.txt)