...

вторник, 2 сентября 2014 г.

Автоматическая генерация 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
)


This entry passed through the Full-Text RSS service - if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий