bash - "random walk"脚本的 if 条件问题

标签 bash if-statement conditional-statements

我试图让坐标“x”在区间[-1,1]内随机移动。但是,我的代码有时有效,有时无效。我试过 ShellCheck,但它说“没有检测到问题!”。我是条件语句的新手,我用错了吗?

我在 Linux 的 Windows 子系统上运行它。我正在 nano 上编辑它。由于我有一个脚本可以绘制 200 个这样的“随机游走”,代码应该可以始终如一地工作,但我真的不明白为什么它不能。

这是我的代码:

x=0
for num in {1..15}
do
  r=$RANDOM
  if [[ $r -lt 16383 ]]
  then
    p=1
  else
    p=-1
  fi
  if [[ $x -eq $p ]]
  then
    x=$(echo "$x-$p" | bc )
  else
    x=$(echo "$x+$p" | bc )
  fi
  echo "$num $x"
done

我期待这样的事情:

1 -1
2 0
3 1
4 0
5 1
6 0
7 1
8 0
9 1
10 0
11 -1
12 0
13 1
14 0
15 1

但通常的输出是这样的:

1 1
2 0
3 -1
4 0
5 -1
6 0
7 -1
(standard_in) 1: syntax error
8
(standard_in) 1: syntax error
9
(standard_in) 1: syntax error
10
(standard_in) 1: syntax error
11
(standard_in) 1: syntax error
12
(standard_in) 1: syntax error
13
(standard_in) 1: syntax error
14
(standard_in) 1: syntax error
15

总是在 -1 之后停止。

最佳答案

您可以使用 bash 执行此操作:

 x=$(( x - p ))

 (( x -= p ))

而且你不需要bc

关于bash - "random walk"脚本的 if 条件问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57703459/

相关文章:

image - 使用 ImageMagick 将图像批量调整大小到新文件夹中

javascript - 年龄计算器 : checking for a blank input or a string input

javascript - 为什么我的代码不从 if 语句输出字符串?

javascript - 在 JavaScript 条件语句中使用 Razor 语法

linux - touch 命令在一个目录下创建多个文件(不同名称)

linux - 如何 grep 匹配具有多个选项的多个模式

bash - 扫描文件一次并从中切割不同的东西?

c++ - 对于 ((unsigned int)0-1)>0 返回真

java - 我需要有人解释一下查询条件

mysql - MySQL中如何使用内连接和多个条件进行计数