2012-12-16 2 views
1

мне нужно знать этот пакетный скрипт в Bash:Batch колотить преобразования

@echo off 
set /p name= Name? 
findstr /m "%name%" ndatabase.txt 
if %errorlevel%==0 (
cls 
echo The name is found in the database! 
pause >nul 
exit 
) 
cls 
echo. 
echo Name not found in database. 
pause >nul 
exit 

Я новичок в ядре Linux, так что начинать с легкого дистрибутива - Ubuntu 12.10. Моя проблема в том, что я действительно мало знаю о Bash Script, так как я очень привык к формату Batch Script; что, очевидно, является плохой привычкой для моего C++.

+1

Bash не имеет ничего общего с ядром Linux. –

ответ

2

Я думаю, что это что-то вроде этого:

#!/bin/bash 

read -p "Name? " name 

clear 

if [ $(grep -qF "$name" ndatabase.txt) ] 
then 
    read -p "The name is found in the database!" PAUSE 

else 
    read -p "Name not found in database." PAUSE 
fi 

и сокращенный вариант:

#!/bin/bash 
read -p "Name? " name 
[ $(grep -qF "$name" ndatabase.txt) ] && echo "The name is found in the database!" || echo "Name not found in database." 
+1

+1. Я бы использовал 'read -p 'Name?" Name' и 'if grep -qF" $ name "file; затем ... '- вы можете добавить эквивалент« pause »:' read -p 'Hit Enter, чтобы продолжить «x' –

+0

@glennjackman благодарит за советы! –

0

Умм "Korn оболочки" очень тесно связана с Bash (см OReilly 'Изучение Korn Shell' Розенблаттом ')

@echo off    ::: has no linux/bash meaning 
set /p name= Name? ::: read input from prompt 'name?' --- _'echo -n "name?"; read TERM;'_ 
findstr /m "%name%" ndatabase.txt ::: _grep $TERM ndatabase.txt_ 

if %errorlevel%==0 ::: _if (($! == 0)); then_ enclosed with _fi_; the ((means numeric 
cls     ::: no real linux/bash meaning (maybe multiple _echo_ statements 
pause    ::: can be faked with _read_ 
_exit_ translates rather well.   
_$$_=process id (aka pid) [email protected]_ commandline arguments, there are others : _$!_ is last exit code 
var=_$(command)_  var (with **NO** dollarsign assumes the contents of _command_'s output 
+3

'clear' ==' cls' –

0

Я думаю, это как можно более прямым:

#!/bin/bash 
read -p "Name? " name 
fgrep -le "$name" ndatabase.txt 
if [ $? = 0 ]; then 
    clear 
    echo "The name is found in the database!" 
    read -n1 >/dev/null 
    exit 
fi 
clear 
echo 
echo "Name not found in database." 
read -n1 >/dev/null 
exit 

Как уже упоминалось, есть более короткие и элегантные решения.

Смежные вопросы