LINUX.ORG.RU

Перевод скрипта из Batch(Win) в Bash(Linux) ???

 , , , ,


0

1

Добрый день нужна помощь перевода скрипта из Batch(Win) в Bash(linux):

@echo off
title Upgrade Microsoft Download Center by Black Phreaker v1.0.7
color 0c
chcp 1251
mode con:cols=120 lines=30
cls


@echo Cannot connect to Microsoft Download Center
@echo Do you want to exit? (y/n)
@echo.

@SET /P dll="root@BlackPhreaker:~# "

rem *************************************************************
rem DLL
rem *************************************************************
@IF "%dll%"=="start" @SET dll="%~dp0\dll\baselib.001"
@IF "%dll%"=="kill"  @SET dll="%~dp0\dll\baselib.002"
@IF "%dll%"=="help"  @SET dll="%~dp0\dll\baselib.003"
@IF "%dll%"=="info"  @SET dll="%~dp0\dll\baselib.004"
rem *************************************************************
rem DLL
rem *************************************************************

@IF EXIST %dll%.dll @COPY %dll%.dll %dll%.bat
@IF EXIST %dll%.bat @CALL %dll%.bat
@IF EXIST %dll%.bat @DEL  %dll%.bat

wineconsole govno_skript.bat

anonymous ()

А что тут переводить? Он на лине всё равно работать не будет.

RazrFalcon ★★★★★ ()
Ответ на: комментарий от RazrFalcon

Вот Я и спрашиваю как сделать аналог этого скрипта на bash чтобы он работал???

Интересует вот эта часть в основном:

@SET /P dll="root@BlackPhreaker:~# "

@IF "%dll%"=="start" @SET dll="%~dp0\dll\baselib.001"
@IF "%dll%"=="kill"  @SET dll="%~dp0\dll\baselib.002"
@IF "%dll%"=="help"  @SET dll="%~dp0\dll\baselib.003"
@IF "%dll%"=="info"  @SET dll="%~dp0\dll\baselib.004"

@IF EXIST %dll%.dll @COPY %dll%.dll %dll%.bat
@IF EXIST %dll%.bat @CALL %dll%.bat
@IF EXIST %dll%.bat @DEL  %dll%.bat

BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Если ты осилил написать это в ЦЭЭМДЭ, то на баше и подавно сможешь, т.к. он в разы легче этой наркомании лунной ночью.

title Upgrade Microsoft Download Center by Black Phreaker v1.0.7

И да, если помогу, то ты оставишь там мои копирайты?

anonymous ()
Ответ на: комментарий от BlackPhreaker

Интересует вот эта часть в основном:

read -p 'root@BlackPhreaker:~# ' dll

dpZero="$(readlink -f "$0")"
[ "$dll"=="start" ] && dll="$dpZero/dll/baselib.001"
[ "$dll"=="kill" ] && dll="$dpZero/dll/baselib.002"
[ "$dll"=="help" ] && dll="$dpZero/dll/baselib.003"
[ "$dll"=="info" ] && dll="$dpZero/dll/baselib.004"

[ -f "${dll}.dll" ] && . "${dll}.dll"

Как-то так.

dexpl ★★★★★ ()
Последнее исправление: dexpl (всего исправлений: 1)
Ответ на: комментарий от anonymous

Но ведь Анонимус это террористическая организация, запрещённая на территории РФ.

anonymous ()
Ответ на: комментарий от anonymous

А вот это уже дискриминация, надо подавать в суд по правам человека.

anonymous ()
Ответ на: комментарий от dexpl

Спасибо за намек в нужном направлении но вот проблема не работает Вы проверяли???

black@blackphreaker:~/Desktop/1# ./terminal3.sh bash: ./terminal3.sh: /bin/bash^M: плохой интерпретатор: Нет такого файла или каталога

BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Ругань на «плохой интерпретатор» является следствием того, что в файле terminal3.sh в качестве символа конца строки используется CRLF вместо человеческого LF. Для приведения terminal3.sh к человеческому виду достаточно применить к нему команду dos2unix:

dos2unix terminal3.sh

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

Это Я уже сделал но почему то скрипт не работает вот листинг

terminal3.sh

#!/bin/bash

read -p "root@BlackPhreaker:~# " dll

dpZero="$(readlink -f "$0")"
[ "$dll"=="start" ] && dll="$dpZero/dll/baselib.001"
[ "$dll"=="kill" ] && dll="$dpZero/dll/baselib.002"
[ "$dll"=="help" ] && dll="$dpZero/dll/baselib.003"
[ "$dll"=="info" ] && dll="$dpZero/dll/baselib.004"

[ -f "${dll}.dll" ] && . "${dll}.dll"



baselib.001
#!/bin/bash
echo "Test OK baselib.001.sh"
BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Судя по исходному батнику, на винде у тебя был baselib.001.dll. Соответственно, либо переименуй baselib.001 в baselib.001.dll, либо убери .dll из последней строки terminal3.sh:

 [ -f "${dll}" ] && . "${dll}"

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

Так он и называется baselib.001.dll ... Насколько я понял он просто его не находит в папки dll Щас ищю причину

Не могли бы подсказать как возможно осуществить следующие:

Чтоб скрипт terminal3.sh 1) Создавал копию baselib.001.dll файла с расширением .sh 2) Потом запускал ее (baselib.001.sh) 3) После выхода из скрипта (terminal3.sh) удолял baselib.001.sh

Как это было организовано в батнике...

BlackPhreaker ()
Ответ на: комментарий от dexpl

вот так все работает

terminal.sh

#!/bin/bash

read -p "root@BlackPhreaker:~# " dll

dpZero="$(readlink -f "$0")"
#[ "$dll"=="start" ] && dll="$dpZero/dll/baselib.001"
[ "$dll"=="start" ] && sh ./baselib.001.dll
#[ "$dll"=="kill" ] && dll="$dpZero/dll/baselib.002"
#[ "$dll"=="help" ] && dll="$dpZero/dll/baselib.003"
#[ "$dll"=="info" ] && dll="$dpZero/dll/baselib.004"

[ -f "${dll}.dll" ] && . "${dll}.dll"

BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Для такого есть associative array или switch.

anonymous ()
Ответ на: комментарий от BlackPhreaker

как возможно осуществить следующие <…>

Запросто:

[ -f "${dll}.dll" ] && . {
  cp "${dll}.dll" "${dll}.sh"
  sh "${dll}.sh"
  rm "${dll}.sh"
}
Но зачем вся эта возня с копированием-запуском-удалением, если можно сделать [ -f "${dll}.dll" ] && . "${dll}.dll"?

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

А теперь понятно...

Но вот почему не запускаются dllки я кажется разобрался осталось устранить проблему к размышлению...

#!/bin/bash

dpZero="$(readlink -f "$0")"

echo $dpZero
echo $PWD

Выводит следующее:
/root/Desktop/terminal/echo.sh
/root/Desktop/terminal


Вот теперь как можно устранить эту проблему с путями по чему не запускается dllки????
BlackPhreaker ()
Ответ на: комментарий от das_tier

Задрался уже голова кипит все перебывал а в чем проблема не могу найти...

BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Не знаю так и не запустил:

terminal.sh

#!/bin/bash

read -p "root@BlackPhreaker:~# " dll

dpZero="$(readlink -f "$0")"
#echo $dpZero
#echo $PWD #!!!

[ "$dll"=="start" ] && dll="$PWD/dll/baselib.001"
[ "$dll"=="kill" ]  && dll="$dpZero/dll/baselib.002"
[ "$dll"=="help" ]  && dll="$dpZero/dll/baselib.003"
[ "$dll"=="info" ]  && dll="$dpZero/dll/baselib.004"

[ -f "${dll}.dll" ] && . "${dll}.dll"


baselib.001.dll
#!/bin/bash
echo "Test OK baselib.001.sh"

baselib.002.dll
#!/bin/bash
echo "Test OK baselib.002.sh"


Может кто то может... ((
BlackPhreaker ()

Да просто объясни, что делает этот скрипт и зачем. Тебе обязательно помогут.

das_tier ★★★★★ ()
Ответ на: комментарий от BlackPhreaker

dpZero=«$(readlink -f »$0")"

dpZero="$(dirname "$(readlink -f "$0")")", разумеется.

dexpl ★★★★★ ()
Ответ на: комментарий от dexpl

После изменения:

dpZero="$(dirname "$(readlink -e "$0")")"
на 
dpZero="$(dirname "$(readlink -f "$0")")"

При вводе любой команды: start,kill,help,info... Выполняется только последний скрипт (baselib.004.dll ) Yже голова лопается!!! Не могу понять Что не так... Когда при вводе start должен выполнятся baselib.001.dll при вводе kill должен выполнятся baselib.002.dll и т.д.

BlackPhreaker ()
Ответ на: комментарий от BlackPhreaker

Не могу понять

А что, в винде не принято читать документацию?

anonymous ()
Ответ на: комментарий от BlackPhreaker

Может кто нибудь еще заметить ошибки...

#!/bin/bash

read -p "root@BlackPhreaker:~# " dll

dpZero="$(dirname "$(readlink -f "$0")")" #!!! OK

[ "$dll"=="" ]  && exit 0
[ "$dll"=="start" ] && dll="$dpZero/dll/baselib.004"
[ "$dll"=="kill" ]  && dll="$dpZero/dll/baselib.002"
[ "$dll"=="help" ]  && dll="$dpZero/dll/baselib.003"
[ "$dll"=="info" ]  && dll="$dpZero/dll/baselib.001"

[ -f "${dll}.dll" ] && . "${dll}.dll"
BlackPhreaker ()
Ответ на: комментарий от mystery

Спасибо сделал при помащи оператора Case!!!

#!/bin/bash

read -p "root@BlackPhreaker:~# " dll

dpZero="$(dirname "$(readlink -f "$0")")" #!!! OK

case $dll in #start оператора case.

start)
dll="$dpZero/dll/baselib.001"
[ -f "${dll}.dll" ] && . "${dll}.dll"
;;

kill)
dll="$dpZero/dll/baselib.002"
[ -f "${dll}.dll" ] && . "${dll}.dll"
;;

help)
dll="$dpZero/dll/baselib.003"
[ -f "${dll}.dll" ] && . "${dll}.dll"
;;

info)
dll="$dpZero/dll/baselib.004"
[ -f "${dll}.dll" ] && . "${dll}.dll"
;;

esac #end оператора case.

Но все же остался вопрос прежний скрипт можно использовать как нибудь без оператора Case???

BlackPhreaker ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.