Автоматическая генерация bat-файлов Windows и скриптов Bash
Batsh — простой язык программирования, который компилируется в файлы Bash и Windows Batch. Таким образом, можно один раз написать скрипт на Batsh — и он скомпилируется в исполняемые файлы на Linux, Mac OS и Windows, без всяких зависимостей.Разработчики подчёркивают, что писать на Batsh гораздо проще, чем на Bash и Windows Batch, по отдельности. В доказательство они приводят несколько примеров.
ПримерыВыражение a = 1; b = «string»; c = [1, 2, «str», true, false]; a = 1 + 2; b = a * 7; c = «Con» ++ «cat»; d = c ++ b; Результат на Bash a=$((1)) b=«string» c=($((1)) $((2)) «str» $((1)) $((0))) a=$((1 + 2)) b=$(($a * 7)) c=«Con«cat» d=»$c»$b» Результат на Windows Batch @echo off setlocal EnableDelayedExpansion setlocal EnableExtensions
set /a a=1 set b=string set /a c_0=1 set /a c_1=2 set c_2=str set /a c_3=1 set /a c_4=0 set /a a=^(1 + 2^) set /a b=^(! a! * 7^) set c=Concat set d=! c! b! Рекурсия function fibonacci (num) { if (num == 0) { return 0; } else if (num == 1) { return 1; } else { return fibonacci (num — 2) + fibonacci (num — 1); } } fibonacci (5); Результат на Bash function fibonacci { local _1 local num local _0 num=»$1» if [ »$num» == $((0)) ]; then «echo» »-ne» $((0)) return else if [ »$num» == $((1)) ]; then «echo» »-ne» $((1)) return else _0=$(«fibonacci» $(($num — 2))) _1=$(«fibonacci» $(($num — 1))) «echo» »-ne» $(($_0 + $_1)) return fi fi } «fibonacci» $((5)) Результат на Windows Batch @echo off setlocal EnableDelayedExpansion setlocal EnableExtensions
set /a _0=5 call: fibonacci _1 0 _0 echo | set /p ^=!_1!
goto: EOF : fibonacci set num_%~2=!%~3! if! num_%~2! EQU 0 ( set %~1=0 goto: EOF ) else ( if! num_%~2! EQU 1 ( set %~1=1 goto: EOF ) else ( set /a _0_%~2=^(! num_%~2! — 2^) set /a _5_%~2=^(1 + %~2^) call: fibonacci _6_%~2!_5_%~2! _0_%~2 set _1_%~2=!_6_%~2! set /a _2_%~2=^(! num_%~2! — 1^) set /a _7_%~2=^(1 + %~2^) call: fibonacci _8_%~2!_7_%~2! _2_%~2 set _3_%~2=!_8_%~2! set /a _4_%~2=^(!_1_%~2! + !_3_%~2!^) set %~1=!_4_%~2! goto: EOF ) ) Цикл // Fibonacci n = 0; i = 0; j = 1; while (n < 60) { k = i + j; i = j; j = k; n = n + 1; echo(k); } Результат на Bash # Fibonacci n=$((0)) i=$((0)) j=$((1)) while [ $(($n < 60)) == 1 ]; do k=$(($i + $j)) i="$j" j="$k" n=$(($n + 1)) "echo" "$k" done Результат на Windows Batch @echo off setlocal EnableDelayedExpansion setlocal EnableExtensions
rem Fibonacci set /a n=0 set /a i=0 set /a j=1 : WHILE_0 if! n! LSS 60 ( set /a k=^(! i! + ! j!^) set i=! j! set j=! k! set /a n=^(! n! + 1^) echo! k! goto WHILE_0 )