This page is for brainstorming a scripting language for gPXE. Feel free to edit to your heart's delight - everything should be versioned by the wiki anyway! === Commands === The current gPXE shell strips whitespace from a line and splits into an ''argv[]'' array: command [arg1 [arg2 [arg3 ...]]] === Variables === Currently, settings like the IP address and boot filename are available as variables. In the future, scripts should be able to create temporary variables as scratch space. set net0/ip 192.168.0.1 set my_ip 10.0.0.15 show net0/netmask clear net0/gateway Variable expansion is already available in mainline gPXE: dhcp ${my_iface} initrd http://etherboot.org/initrds/${node_id}.bz2 "References" could work like this: set ref_to_ip net0/ip show ${ref_to_ip} => ...value of net0/ip... === Arithmetic === Standard arithmetic operators should work for integral types: set i ${(i / 2 + 1) * 2} The operators are: ''+'', ''-'', ''*'', ''/'', ''%'', ''('', and '')''. === String manipulation === The format string built-in function allows string concatentation and formatting: set net0/ip ${fmt("%d.%d.%d.%d", 192, 168, 0, 10 + host_num)} === Comparison and logic === The standard operators for integral and string types (string ordering probably isn't necessary though): == != < > <= >= They should either evaluate to special boolean values "true"/"false", or we need to define truth rules for all types (e.g. integral types are true if not equal to zero). === Control flow === The only control flow statement is the ''if'' statement: if goto For example: set i 0 loop: dhcp net${i} kernel ${kernel_url} boot set i ${i + 1} if ${i < $iface_count} goto loop === Needs discussion === * We probably need an exit code built-in variable like ''$?'' in POSIX shell. * Bitwise operators ''|'', ''&'', ''^'', ''~'', ''<<'', and ''>>'' may be needed. * Focus needs to be on what we can leave out rather than what to add. * More use cases so we know what users need. === Links === * [[http://bellard.org/otcc/|Obfuscated Tiny C Compiler]] * [[http://www.nicholson.com/rhn/files/dds_basic.c|TINY obfuscated C BASIC interpreter]] * [[http://www.ittybittycomputers.com/IttyBitty/TinyBasic/TinyBasic.c|TinyBasic]] * [[http://www.personal.leeds.ac.uk/~bgy1mm/Minibasic/basic.c|Mini BASIC]]