2014-01-10 3 views
0

이것은 이상합니다.매개 변수로 아무것도 허용하는 셸 스크립트

다음은이 파일에 대한 더 많은,하지만 상관없이 문이, "32 비트"를 말할 것이다 경우 내가 ./compile.sh 입출력 (64)를 실행하는 경우에도 지금 내 파일

#!/bin/bash 
num=$# 
clear 
ip=$1 
op=$2 
ts=$3 
echo $ts 
if [ $ts=='32' ]; then 
     echo "32 Bit" 
elif [ $ts=='64' ]; then 
     echo "64 Bit" 
else 
     echo "NONE" 
fi 
echo "Complete!" 

입니다.

나는 또한 변수를 둘러싼 둘러보기를 시도했습니다. 첫 번째 echo 문은 실제로 "64"를 출력합니다.

+0

수정 if [$ ts == '32']; then'if [$ ts == '32']; 다음''=='의 양쪽에 공간이 있습니다 – Rugal

답변

3

단일 문자열 =을 사용하여 문자열을 테스트하십시오.

if [ $ts = "32" ] 

그래서 스크립트이 지금된다 :

#!/bin/bash 
num=$# 
clear 
ip=$1 
op=$2 
ts=$3 
echo $ts 
if [ $ts = "32" ]; then 
     echo "32 Bit" 
elif [ $ts = "64" ]; then 
     echo "64 Bit" 
else 
     echo "NONE" 
fi 
echo "Complete!" 

편집 :
크리스가 작동하지만 당신이

다음과 같은 것을 ==의 주위에 공간을 가지고에도 이중 =에 언급 한 바와 같이
if [ $ts == "32" ] 
+0

와우! 정말 고마워. 얼마나 창피한가. – Goodies

+2

'=='대신'='가 문제가되지 않습니다. 오히려 운전자 주변의 공간에 관한 것입니다. http://stackoverflow.com/questions/15365307/why-does-adding-spaces-around-bash-comparison-operator-change-the-result – chris

+0

@ Goodies : 문제 없습니다. 우리 모두에게 일어납니다. . 도움이된다면 대답을 받아 들여주세요 – Anubhab

1

사례 진술을 사용하는 것이 좋습니다. 간단하고 cl ean

#!/bin/bash 
num=$# 
clear 
ip=$1 
op=$2 
ts=$3 
echo $ts 

case $ts in 
    "32") echo "32 Bit" ;; 
    "64") echo "64 Bit" ;; 
    *) echo "NONE" ;; 
esac 
echo "Complete!" 
관련 문제