shell 脚本失败

shell 脚本失败

我正在尝试在 Ubuntu 10.04 中运行以下脚本,但在 intget i 声明中遇到了不同的问题。有人能尽快帮助我吗

integer i

i=1

while true
    do
    read response

    if [ -z == $response ] 
    then
     continue 
    fi

    if [ $response == "q" ]
    then
     break
    fi


    if [ -f /var/tmp/UE1_${i}.txt ]
    then
      cat /var/tmp/UE1_${i}.txt
      i=$i+1
    fi


    if [ $i -eq  100 ] 
    then
     break
    fi

done

答案1

integer i
i=1

简单i=1,无空格就足够了。

if [ -z == $response ] 
    then
        continue 
fi

continue意思是跳过循环后面的所有内容continue并转到循环的下一次迭代。我不认为这是你想要做的。

if [ $response == "q" ]

"$response"引用时,最佳做法是将变量名括在双引号 ( ) 中。

i=$i+1

这会将 赋值1+1$i而不是2。你可以使用 expr

i=$(expr $i + 1)

或者直接使用:

(( i++ ))

您的最终脚本将如下所示:

#!/bin/bash

i=1

while true
do
    read response

    if [ "$response" == "q" ]
    then
        break
    fi

    if [ -f /var/tmp/UE1_${i}.txt ]
    then
        cat /var/tmp/UE1_${i}.txt
        i=$(expr $i + 1)
    fi

    if [ $i -eq  100 ] 
    then
        break
    fi

done

有关 bash 脚本的更多信息,请查看这个出色的教程:高级 Bash 脚本指南

答案2

在 bash 中,您不必像在其他语言(例如 C 系列)中那样声明类型。

因此第一行integer i会导致格式错误。您可以将其删除。

有一种情况,你可以告诉 bash,声明的变量必须被视为某种类型,如果您将第一行编辑为:则可以做到这一点: declare (option) variable=value在您的情况下:
declare -r i=1-r选项告诉 bash 该变量必须被视为整数。

您可以检查变量声明的可用选项这里

相关内容