2013-01-31 5 views
2

왜 Cygwin에서 터미널에서 - 문 작업
및 우분투 경우 - 유닉스 -
이 코드는 작동하지 :UNIX는 valid_password

#!/bin/sh 
valid_password="pass" 

echo "Please enter the password:" 
read password 

if [ "$password" == "$valid_password" ] 
then 
    echo "You have access!" 
else 
    echo "Access denied!" 
fi 
+1

도움이되지 않습니다. 어떻게 작동하지 않습니까? 어떤 오류 메시지가 표시됩니까? 나는 그 파일에'dos2unix file'을 시도한 DOS 행이 있다고 의심한다. –

+0

'sh! '대신'#!/bin/bash'와 함께 작동 할 것인가? 또한 echo 명령의 큰 따옴표를 작은 따옴표로 변경하여 쉘이'! '를 히스토리 참조로 해석하지 않도록하는 것이 좋습니다. – nullrevolution

답변

1

[에 대한 올바른 구문이기 때문이다 :

[ a = b ] 

오류 메시지에서 쓴 것처럼 보입니다.

if ["$password" = "$valid_password" ] 

변화 이와 : [

if [ "$password" = "$valid_password" ] 

통보 공간. if은 셸 명령을 사용하고 실행하려고 시도하고 프로그램의 종료 코드가 0 인 경우 if 문에서 명령을 실행합니다. 터미널에서

, 즉 쓰기 : @nullrevolution이는 !은 큰 따옴표를 사용하는 경우 평가 말했듯이

[email protected]$ pass=pass; valid=pass 
[email protected]$ if [ "$pass" = "$valid" ]; then echo 'You have access!'; fi 

, 그것은하려고합니다

[email protected]$ true; echo $? 
0 

은 if 문을 테스트 쉘 기록에서 마지막 명령을 실행하십시오.이 경우 u과 일치합니다.

[email protected]$ uname 
Linux 
[email protected]$ !u 
uname 
Linux 
[email protected]$ echo "!" 
sh: !: event not found 

는 따옴표가 일치하기 전에 ! 평가하고, 에코가 실행되기 때문이다. 당신은 여전히 ​​큰 따옴표를 사용하려는 경우, 당신은 따옴표 외부 !을 탈출해야합니다 :

echo "Access denied"\! 

@nullrevolution 또한 내부 문 경우 표현을위한 내장 문법을 가지고있는 bash으로 시도 할 수있다. 프로그램에서 또한

#!/bin/bash 

valid_password=pass 

echo "Please enter the password:" 
read password 

if [[ "$password" == "$valid_password" ]]; then 
    echo 'You have access!' 
else 
    echo 'Access denied!' 
fi 

난 당신이 일시적으로 변화 에코 해제, 단말기에 암호를 에코하고 싶지 않은 추측 :

read password 

당신이 잊어 버린 경우

stty -echo 
read password 
stty echo 

stty echo을 작성하여 에코를 다시 켜려면 reset을 터미널에 쓰면 터미널이 기본 설정으로 재설정됩니다.

본 셸 스크립트에 대한 유용한 튜토리얼은 여기에서 찾을 수 있습니다 :

if [ "$password" = "$valid_password" ] 

대신 또한

if [ "$password" == "$valid_password" ] 

:

http://www.grymoire.com/Unix/Sh.html

+0

미안하지만 작동하지 않습니다, 어쩌면 내가 우분투에서 뭔가해야합니까? – user2028880

+0

shay @ 우분투 : ~/scripts $ ./password 비밀번호를 입력하십시오 : 패스 ./password : 12 : [pass : 찾을 수 없음] 액세스가 거부되었습니다! – user2028880

+0

emil 고마워요. 지금은 작동합니다! – user2028880

1

@emil 답을 지적했다 스크립트에 사용 권한을 부여 하시겠습니까? 시도해보십시오.

chmod +x script_name 
+0

shay @ 우분투 : ~/scripts $ ./password 비밀번호를 입력하십시오 : 패스 ./password : 12 : [pass : 찾을 수 없음] 액세스가 거부되었습니다! – user2028880

+0

예 chmod 777, dos2unix는 Cygwin에 있습니다. - 우분투에서는 작동하지 않지만, 아니요. – user2028880

+0

FYI - 우분투의 'dos2unix'는 'fromdos'입니다. – nullrevolution