我正在尝试在 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 该变量必须被视为整数。
您可以检查变量声明的可用选项这里。