는 [
에 대한 올바른 구문이기 때문이다 :
[ 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
도움이되지 않습니다. 어떻게 작동하지 않습니까? 어떤 오류 메시지가 표시됩니까? 나는 그 파일에'dos2unix file'을 시도한 DOS 행이 있다고 의심한다. –
'sh! '대신'#!/bin/bash'와 함께 작동 할 것인가? 또한 echo 명령의 큰 따옴표를 작은 따옴표로 변경하여 쉘이'! '를 히스토리 참조로 해석하지 않도록하는 것이 좋습니다. – nullrevolution