#!/bin/awk -f
function pr(str) {
if(lastc !~ "[{(]")
gsub(/'/, "''", str)
printf "%s", str
}
function trans(c) {
printf "%s", end
lastc = c
end = "\n"
if(c == "%")
end = ""
else if(c == "(")
printf "echo -n "
else if(c ~ "[})]") {
end = "'\n"
printf "echo -n '"
}
}
BEGIN {
lastc = "{"
trans("}")
}
END {
print end
}
/^%/ && $0 !~ /^%[{()}%]/ && lastc !~ /[({]/ {
trans("%")
print substr($0, 2)
next
}
{
if(lastc == "%")
trans("}")
n = split($0, a, "%")
pr(a[1])
for(i=2; i<=n; i++) {
c = substr(a[i], 1, 1)
rest = substr(a[i], 2)
if((lastc !~ "[({]" && c ~ "[({]") ||
(lastc == "{" && c == "}") ||
(lastc == "(" && c == ")"))
trans(c)
else if(c == "%")
pr("%")
else
pr("%" c)
pr(rest)
}
pr("\n")
}
Generar contenido html dinámico de ejemplo, se crea un fichero con nombre test que tendrá el siguiente contenido.
% # Declaración de tres variables.
% nombre=Marisa
% apellido=Gutiérrez
% uid=`id`
% # Código HTML usando variables, condiciones y comandos bash.
Web de '%($nombre $apellido%)'
% if [[ $EUID -eq 0 ]]; then # Establecemos una condición ofreciendo dos posibles salidas dependiendo del uid.
El usuario es Root '%($uid%)'
%else
La Variable del sistema $USER dice que el usuario es %($USER%) y tiene los siguientes IDs %($uid%)
%fi
Estos son los archivos del directorio donde se ejecutó el comando "ls -lt".
% ls -lt # Ejecución de un comando de Linux que listará el directorio actual y quedará entre etiquetas
Ejecutamos de la siguiente manera el fichero test.
./template.awk test | bash
El resultado como se puede ver es el código html con el contenido dinámico generado mediante instrucciones shell (variables locales, variables de entorno, condición y salida del comando ls).
Web de Marisa Gutierrez
La Variable del sistema $USER dice que el usuario es Mari y tiene los siguientes IDs uid=1000(Mari) gid=1000(Mari) grupos=1000(Mari),108(vboxusers)
Estos son los archivos del directorio donde se ejecutó el comando "ls -lt".
total 9275784
-rw-r--r-- 1 Mari Mari 777 mar 30 21:38 test
-rw-r--r-- 1 Mari Mari 13834 mar 30 21:35 backup.log
drwxr-xr-x 6 Mari Mari 4096 mar 30 21:28 Backups_web
-rw-r--r-- 1 Mari Mari 60198 mar 30 21:28 calendar.ics
...