如何在bash脚本中生成1和0的序列

时间:2017-02-01 11:24:37

标签: linux bash shell

我正在尝试使用bash脚本生成一个1和0的序列。

#!/bin/bash
clock=1
n=1
# continue until $n equals 5
while [ $n -le 5 ]
do
    echo "$clock"
    n=$(( n+1 ))     # increments $n
    clock=$(~clock)
done

预期产量: 1 0 1 0 1

从上面的代码生成的输出: 我从这一行得到错误:clock = $(~clock) 错误:~clock:找不到命令

4 个答案:

答案 0 :(得分:2)

如果要生成1和0的序列,可以使用

#!/bin/bash
clock=1
n=1
# continue until $n equals 5
while [ $n -le 5 ]
do
    echo "$clock"
    n=$(( n+1 ))     
    # increments $n
    clock=$((clock+1))
    clock=$((clock%2))
done

如果要生成1和0的随机序列,可以使用

#!/bin/bash
n=1
# continue until $n equals 5
while [ $n -le 5 ]
do
    echo "$((RANDOM%2))"
    n=$(( n+1 ))
done

答案 1 :(得分:2)

问题出在这一行:

clock=$(~clock)

这里bash试图在$(...)内运行任何命令作为命令(它被称为命令替换)。

使用~clock也不正确,因为它只会执行按位否定,并且不会像您期望的那样产生10

您可以使用此脚本获取替代10打印:

#!/bin/bash
clock=1
# continue until $n equals 5
for ((n=0; n<5; n++))
do
    echo "$clock"
    clock=$((1 - clock))
done

答案 2 :(得分:2)

另一个简短的方法

<div class="container">
  <div class="hero-unit fp-block">
    <div id="ut-wrap">
      <div class="inner">
        <div class="holder">
          <iframe src="https://www.youtube.com/embed/_VRXrp_AfMM" frameborder="0" allowfullscreen></iframe>
          <img src="http://placehold.it/150x150">
        </div>
      </div>
    </div>
  </div>
</div>

或稍微简洁但更容易配置变量来定义循环:

#!/bin/bash
for i in {1..5}
do
  echo $((i%2))
done

另一个,只是为了好玩(不会在阅读脚本中这样做,更像是一个小小的谜题,以找出它的工作原理)。删除&#34; false&#34;从0开始的行。

#!/bin/bash
for ((i=1;i<=5;i++))
do
  echo $((i%2))
done

答案 3 :(得分:0)

您可以通过大括号扩展来利用以下技巧。

echo {,,,,}{1,0}

这将产生5对1和0。