如何制作一个在终端中心无限打印星号的bash脚本?

时间:2018-02-23 12:48:46

标签: bash loops

如果按 L 键,该行将向左移动。如果按 R 键,该行将向右移动。

我设法做到了:

#!/bin/bash
b="                            *                            "
while :
do

echo "$b"
read -s input

if [ $input==s ]
then
echo "${b:1}"
else
  if [ $input==d ]
  then
  echo " $b"
  fi  
fi

sleep 1

done

但我不知道如何在不插入“读取”和阻止循环的情况下进行输入控制。

1 个答案:

答案 0 :(得分:1)

如果你无论如何都要睡一秒钟,你也可以使用read的超时选项。

这将最多读取一秒钟的输入:

read -t 1 input

read的返回值高于128时,已达到超时。如果它更低,你必须等待。

if (( $? <= 128 )); then sleep 1; fi

顺便说一句:这会在屏幕中间打印一颗星星:

printf "%*s\n" $((COLUMNS / 2)) \*

COLUMNS是一个变量,包含屏幕宽度。 s格式选项前面的数字表示字符串应该用那么多空格对齐。如果您指定一个星号而不是一个数字printf,则从命令行中读取宽度。