使用 c shell 的脚本中的 While 循环语法错误

问题描述 投票:0回答:2

我正在尝试打印小于用户输入数字的平方数。如果数字大于 1000,则会显示一条错误消息。我的代码遇到的问题是 wile 循环似乎有语法错误,但多次尝试后我找不到语法错误。

这是我的代码的样子:

#! /bin/csh -f

set Square = 0

echo "Please enter a number smaller than 1000"
set num = $<
if ($num > 1000) then
  echo "The number is invalid"
  exit 1
else
echo "Square number for 1 to $num"
set i = 1
while ($i <= num)
  set Square = `$i * $i`
  echo $Square
  @ i++
end
endif

如果我输入一个像 455 这样的虚拟数字。

Error:
455
Square number for 1 to 455
while: Expression Syntax.
shell unix csh
2个回答
0
投票

使用

expr
应该解决这个问题,以及添加一个
$
num


     1 #! /bin/csh -f
     2
     3 set Square = 0
     4
     5 echo "Please enter a number smaller than 1000"
     6 set num = $<
     7 if ($num > 1000) then
     8   echo "The number is invalid"
     9   exit 1
    10 else
    11 echo "Square number for 1 to $num"
    12 set i = 1
    13 while ( $i <= $num )
    14   set Square = `expr $i \* $i`
    15   echo $Square
    16   @ i++
    17 end
    18 endif


0
投票

你的剧本有几个问题

您正在尝试将

$i
num
(字符串)进行比较,而不是与
$num
进行比较。

您可以使用

@
来评估算术表达式,例如
@ x = 2 + 2
$x
设置为
4
;应用它留作练习。用反引号括住算术表达式是行不通的;它尝试将包含的文本作为命令执行,并扩展为命令的输出。

您的循环条件不正确。如果用户输入

500
,您将打印 500 行输出。

(csh 不是一种好的编程语言。考虑学习 sh 或其亲戚之一,例如 ksh、bash 或 zsh。)

© www.soinside.com 2019 - 2024. All rights reserved.