我希望使用 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[[ ... ]]
或算术比较((..))
不需要引用。
每个if
和elif
都必须有一个then
。每个for
或while
后面都必须有一个do
。
使用算术运算符((..))
(用于算术运算或比较(时,需要两个括号。您还可以使用递增和递减运算符++
和--
,例如((a++))
在其中递增/递减值,但是您正在分配结果,您必须在开场((
之前加上$
,例如$((count - 1))
示例使用/输出
$ sh count.sh
5 DOWN
4 DOWN
3 UP
2 UP
1 UP
我认为这解释了大部分语法问题。如果您还有其他问题,请在下面发表评论。