2010-08-05 6 views
2

나는 영화 데이터베이스를 구축 중이며 등급에 대한 중앙값을 찾아야합니다. 나는 배시를하기가 정말로 처음이다. 값이 bash에서 짝수 또는 홀수인지 배우는 방법?

내가 쓴 :

let evencheck=$"(($Amount_of_movies-$Amount_of_0_movies)%2)" 
if [ $evencheck==0 ] 
then 
let median="(($Amount_of_movies-$Amount_of_0_movies)/2)" 
else 
let median="(($Amount_of_movies-$Amount_of_0_movies)/2)+1" 
fi 

$amount_of_movies = 6$amount_of_0_movies = 1을. 나는 중간 값이 3이 될 것으로 기대하지만, 2입니다. 왜 그럴까요?

+0

태그 문제는 숙제하십시오입니다. – wilhelmtell

답변

0

귀하의 경우 시험이 시도 :

[ "$evencheck" == 0 ] 
+0

그것은 일했다! 천재 : 대단히 감사합니다. 여러분. – Gal

+0

답변 수락 ... –

0

중간 값은 기본값의 어떤 종류가 있나요? 나는 그것을 보는 방식으로 if 내부에 가지도 않습니다.

(6-1) % 2 
5 % 2 
1, not 0 
1

이 시도 :

let evencheck="(($Amount_of_movies-$Amount_of_0_movies)%2)" 
if [ $evencheck -eq 0 ] 
then 
    let median="(($Amount_of_movies-$Amount_of_0_movies)/2)" 
else 
    let median="(($Amount_of_movies-$Amount_of_0_movies)/2)+1" 
fi 

는 $를 제거하고 숫자 어떤지를 판정.

0

코드가 구문 분석되지 않습니다. 배쉬에서 식을 평가하기 위해, 당신은

let evencheck="$((($Amount_of_movies-$Amount_of_0_movies)%2))" 

, 그래서 같은를 arithmetics을 평가하는 말 : $((...)) 말했다

, 문제는 조건이다. man test을 참조하십시오.

공백을 양면으로 묶어야합니다. 단일 등호 표시를 사용하십시오.

0

가장 바깥 쪽 괄호와 따옴표가 필요하지 않습니다 (다른 상황 일 수 있음). 또한 let 문에서 변수 이름에서 달러 기호를 생략 할 수 있습니다. 대신 let(()) 양식을 사용하는 경우

let evencheck=(Amount_of_movies-Amount_of_0_movies)%2 
if [ $evencheck == 0 ] 
then 
    let median=(Amount_of_movies-Amount_of_0_movies)/2 
else 
    let median=(Amount_of_movies-Amount_of_0_movies)/2+1 
fi 

, 당신은 수식을 더 읽을 수 있도록 공간을 사용 할 수 있습니다. 또한 if 문에서 사용할 수 있습니다 :

((evencheck = (Amount_of_movies - Amount_of_0_movies) % 2)) 
if ((evencheck == 0)) 
then 
    ((median = (Amount_of_movies - Amount_of_0_movies)/2)) 
else 
    ((median = (Amount_of_movies - Amount_of_0_movies)/2 + 1)) 
fi 
4
 
#!/bin/bash 

if (($# != 1)) ; then 
    echo "syntax: `basename $0` number" 
    exit 255 
else 
    _value=$(expr $1 % 2) 
    (($_value == 0)) && exit 1 || exit 0 
fi 
관련 문제