Linux 中的 Shell 编程错误

Linux 中的 Shell 编程错误

我需要修复我的代码吗?

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 的意思是“偶数”,ganjil 的意思是“奇数”,警告消息大致为“Ops” ,不能为空或限制循环必须 >= 0”。

因此,代码请求一个输入值,检查以确保该值不为空并且为零或更大,然后,当您运行它时,它会无限循环并向终端发送零。因为我不确定编码器的最终目标是什么,所以我不能确定我是否以正确的方式“修复”了它,而是通过移动“let i=i+1;”行在“else”语句之外,它不是无限循环,而是从零计数到输入的循环限制并输出计数。它还计算一路上遇到的偶数和奇数的数量。该代码按原样不对这些计数执行任何操作。也许它是一段较大代码的片段。也许这是一个玩具程序,是由某人为了好玩而进行实验而编写的。无论如何,这是一个“翻译”版本,添加了输出偶数和奇数计数的行:

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

相关内容