Linux의 쉘 프로그래밍 오류

Linux의 쉘 프로그래밍 오류

코드를 수정해야 하나요?

i=0; bil_genap=0;  
bil_ganjil=0;  
echo -n "Batas loop : ";  
read batas;  

if [ -z $batas ] | [ $batas -lt 0 ]; then  
    echo "Ops, tidak boleh kosong atau Batas loop harus >= 0";  
    exit 0;  
fi   
while [ $i -le $batas ]; do   
    echo -n "$i,";  
    if [ `expr $i % 2` -eq 0 ]; then   
        let bil_genap=$bil_genap+1;  
    else  
        let bil_ganjil=$bil_ganjil+1;  
        let i=$i+1;   
    fi  
done  

답변1

사소한 문제 외에도 다음 사항에 밑줄을 쳐야 합니다.

if [ -z $batas ] | [ $batas -lt 0 ]; then  

~이 되다

if [ -z $batas ] || [ $batas -lt 0 ]; then  

대신에:

if [ `expr $i % 2` -eq 0 ]; then  

당신은 그것을 사용할 수 있습니다

if (( $i % 2 == 0 )); then  

답변2

이 기사에는 정보가 부족하여 이것이 나에게 이상하고 매력적인 도전이 되었습니다. 먼저, 로봇 ​​번역가는 언어가 말레이어라고 말했고 "batas"는 "한계" 또는 "경계"를 의미하고 genap은 "짝수"를 의미하고 간질은 "이상함"을 의미하며 경고 메시지는 "Ops"와 같은 것이라고 추측했습니다. 비워 둘 수 없거나 제한 루프가 0보다 커야 합니다."

따라서 코드는 입력 값을 요청하고 값이 비어 있지 않고 0 이상인지 확인한 다음 실행하면 무한 반복되어 터미널에 0을 보냅니다. 인코더의 최종 목표가 무엇인지 잘 모르기 때문에 올바른 방법으로 "고정"했는지는 확실하지 않지만 "let i=i+1;" 줄을 "else" 문 밖으로 이동하면 됩니다. , 무한 루프 대신 입력의 루프 한계까지 0부터 카운트하여 출력합니다. 또한 도중에 만나는 짝수와 홀수의 수도 계산합니다. 코드는 있는 그대로 이러한 개수에 대해 아무 작업도 수행하지 않습니다. 어쩌면 더 큰 코드 조각일 수도 있습니다. 어쩌면 누군가가 재미를 위해 실험하면서 작성한 장난감 프로그램일 수도 있습니다. 어쨌든, 짝수 및 홀수 수를 출력하는 행이 추가된 "번역된" 버전은 다음과 같습니다.

i=0;
even_num=0;
odd_num=0;
echo -n "Limit of loop : ";
read loop_lim;

if [ -z $loop_lim ] | [ $loop_lim -lt 0 ]; then
    echo "Ops, Limit of loop cannot be empty and must be  >= 0";
    exit 0;
fi
while [ $i -le $loop_lim ]; do
    echo -n "$i,";
    if [ `expr $i % 2` -eq 0 ]; then
        let even_num=$even_num+1;
    else
        let odd_num=$odd_num+1;
    fi
    let i=$i+1;
done
echo
echo $even_num
echo $odd_num

관련 정보