2013-11-13 3 views
11

Моя команда .bat файл, чтобы получить ввод данных пользователя из командной строкикак скрыть пароль в командной строке с **** и получить значение в BAT-файл и файл .sh

set /p weblogicpassword=Enter weblogic password:%=% 

Моего .sh командный файл, чтобы получить пользовательский ввод от Баша сценария

echo -n "Enter weblogic password: " 
read weblogicpassword 

Теперь, когда мы вводим некоторые значения для пароля, эти значения могут видеть в командной строке. Как мы можем получить значение пароля из командной строки, которые должны быть невидимыми для пользователей, как * *

+0

возможно дубликат [Могу ли я замаскировать входной текст в файле летучей мыши] (http://stackoverflow.com/questions/664957/can-i- mask-an-input-text-in-a-bat-file) – Boann

+1

Возможно, в следующий раз вы сможете немного уйти от Google, прежде чем задавать вопрос ... – RedX

+0

@Boann, что вопрос пропущен в отношении bash. – RedX

ответ

11

Для Баша его read -s.

-s Silent mode. If input is coming from a terminal, characters are not echoed.

Для партии это кажется более сложным.

Читайте об этом здесь: Can I mask an input text in a bat file

+0

И реализация этого метода может выглядеть так: 'a = ''; при чтении -n 1-с c; do ["$ c" = ''] && break; echo -n '*'; а = "$ A $ с"; done'. Однако это не позволяет использовать backspace. – Alfe

+2

С функцией backspace: 'a = ''; при чтении -n 1-с c; do ["$ c" = ''] && break; если ["$ c" = $ '\ x7f']; затем ["$ a"! = ""] && {a = $ {a: 0: -1}; printf "\ b \ b"; }; else echo -n '*'; а = "$ A $ с"; Fi; done; ' – Alfe

+0

теперь я получаю *** вместо символов в сценарии bash, используя вашу команду. Будь и помогите мне в файле bat. –

7

Вот решение для Windows 32 бит.

@echo off 
echo hP1X500P[PZBBBfh#b##[email protected]`$fPf]f3/f1/5++u5>%temp%\ftp.com 
set /p password=What is your password? <nul 
for /f "tokens=*" %%i in ('%temp%\ftp.com') do set "password=%%i" 
del %temp%\ftp.com 
echo password is "%password%" 
pause 
+0

отлично работает в windows 32 bit.thanks –

+0

Что это за нечетная строка? 'HP1X500P [PZBBBfh # б ## FXF-V @' $ FPF] f3/f1/5 ++ u5'? – RedX

+1

Это Асцию Бинарда Герберта Клебауэра. Вы найдете много созданных им в сообщениях Usenet. – foxidrive

9

С помощью powershell мы можем достичь этого как в 32, так и в 64 бит.

@ECHO OFF 
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ;^
     $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword);^
      [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" 
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p 
echo %password% 

С помощью этого мы можем получить пароль с *** в командной строке

В Баш скрипт мы можем достичь этого, используя ниже код.

#!/bin/bash 
prompt="Enter Password:" 
while IFS= read -p "$prompt" -r -s -n 1 char 
do 
if [[ $char == $'\0' ]];  then 
    break 
fi 
if [[ $char == $'\177' ]]; then 
    prompt=$'\b \b' 
    password="${password%?}" 
else 
    prompt='*' 
    password+="$char" 
fi 
done 
echo " " 
echo "Done. Password=$password" 

Варианты выполнения команды чтения являются: -p: Подскажите строку. -r: Не используйте обратную косую черту в качестве символа эвакуации. -s: Тихий режим, входы не отражены. -n 1: Количество символов для ввода.

чтение возвращает 0, если не встречается \ 0, а символ, который пользователь вводит, помещается в переменную char.

IFS = part очищает переменную IFS, которая гарантирует, что любые пробелы или символы табуляции, которые вы вводите, включаются в пароль, а не анализируются путем чтения.

+0

Вам нужно добавить дополнительную проверку, что пароль не пуст перед удалением символов, иначе вы удалите фактическое приглашение. – Nathan

0

Я прочитал все ответы и исправил один.

Этот код запрашивает у пользователя пароль. Вы можете изменить пароль в if "%password%"=="SuperUser".

Он проверяет ввод, и если вход действителен (SuperUser), он переходит на метку 1.

:1 
echo True 
cls 
exit 
rem Or false goto 2 
:2 
echo False 
cls 
exit 

Вот код:

@echo off 
set "psCommand=powershell -Command "$pword = read-host 'Enter Password' -AsSecureString ;^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword);^
      [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" 
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p 
if "%password%"=="" goto 2 
if "%password%"=="SuperUser" goto 1 

:Again 
set "psCommand=powershell -Command "$pword = read-host 'Wrong Password?. Try Again' -AsSecureString ;^
    $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword);^
      [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)"" 
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p 
if "%password%"=="" goto 2 
if "%password%"=="SuperUser" goto 1 

:2 
goto Again 

:1 
echo Valid password 
pause>nul 
Смежные вопросы