在循环外壳脚本时获取外部变量



我希望使用 shell 脚本在 while 循环之外获取变量的内容

例如:

::

count = 5
while [ @count -gt 0]; do
a=3
b=4
if ( a > b)
result = "UP"
else
result = "DOWN"
fi
count=$[ $count - 1]
done
echo $result

$result每次都显得空荡荡的!

我只想要循环外的结果内容。

任何人都可以在这个问题上提供帮助!我知道变量 inseide 循环是在子外壳中执行的,但我尝试了几个技巧,但不起作用!

感谢 avdance

哇,你的短脚本中有大量的语法错误。我在下面的评论中详细介绍了它们,并调整了声明变量的位置以使循环做某事,例如

#!/bin/sh
count=5     ## no spaces aroung " = "
a=3         ## a & b never change in loop
b=4
while [ "$count" -gt 0 ]; do    ## always quote variables in [ .. ], spaces required
if ((a > b)); then          ## there are two ((..)) in arithmetic comparison
result="UP"             ## NO spaces around " = "
else
result="DOWN"           ## ditto
fi
printf "%d %sn" "$count" "$result"  ## some output helps
count=$((count - 1))        ## use arithmetic ((..)), no $ required inside
((a++))                     ## increment a to make it iteresting.
done

首先,在 shell 中,在作业期间不允许在'='符号周围spaces。使用[ .. ]时,您必须在[之后和]之前有一个空格,并且始终在里面引用您的变量。bash[[ ... ]]或算术比较((..))不需要引用。

每个ifelif都必须有一个then。每个forwhile后面都必须有一个do

使用算术运算符((..))(用于算术运算或比较(时,需要两个括号。您还可以使用递增和递减运算符++--,例如((a++))在其中递增/递减值,但是您正在分配结果,您必须在开场((之前加上$,例如$((count - 1))

示例使用/输出

$ sh count.sh
5 DOWN
4 DOWN
3 UP
2 UP
1 UP

我认为这解释了大部分语法问题。如果您还有其他问题,请在下面发表评论。

最新更新