有趣的shell,管道

本文介绍了一个使用Bash脚本创建的动态管道屏幕保护程序。该程序通过调整各种参数实现不同的显示效果,如管道数量、类型、帧率等。用户可以通过命令行选项定制屏幕保护程序的外观和行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有趣的shell,管道

#!/bin/bash

#按回车退出

 

p=1

f=75 s=13 r=200 t=0

w=$(tput cols) h=$(tput lines)

# ab -> idx = a*4 + b

# 0: up, 1: right, 2: down, 3: left

# 00 means going up   , then going up   -> ┃

# 12 means going right, then going down -> ┓

sets=(

    "┃┏ ┓┛━┓  ┗┃┛┗ ┏━"

    "│╭ ╮╯─╮  ╰│╯╰ ╭─"

    "│┌ ┐┘─┐  └│┘└ ┌─"

    "║╔ ╗╝═╗  ╚║╝╚ ╔═"

)

v="${sets[0]}"

RNDSTART=0

NOCOLOR=0

 

OPTIND=1

while getopts "p:t:f:s:r:RCh" arg; do

case $arg in

    p) ((p=(OPTARG>0)?OPTARG:p));;

    t) ((OPTARG>=0 && OPTARG<${#sets[@]})) && v="${sets[OPTARG]}";;

    f) ((f=(OPTARG>19 && OPTARG<101)?OPTARG:f));;

    s) ((s=(OPTARG>4 && OPTARG<16 )?OPTARG:s));;

    r) ((r=(OPTARG>=0)?OPTARG:r));;

    R) RNDSTART=1;;

    C) NOCOLOR=1;;

    h) echo -e "Usage: $(basename $0) [OPTION]..."

        echo -e "Animated pipes terminal screensaver.\n"

        echo -e " -p [1-]\tnumber of pipes (D=1)."

        echo -e " -t [0-$((${#sets[@]} - 1))]\ttype of pipes (D=0)."

        echo -e " -f [20-100]\tframerate (D=75)."

        echo -e " -s [5-15]\tprobability of a straight fitting (D=13)."

        echo -e " -r LIMIT\treset after x characters, 0 if no limit (D=2000)."

        echo -e " -R \t\trandom starting point."

        echo -e " -C \t\tno color."

        echo -e " -h\t\thelp (this screen).\n"

        exit 0;;

    esac

done

 

clean_up() {

    tput rmcup

    tput cnorm

    exit 0

}

trap clean_up SIGHUP SIGINT SIGTERM

 

for (( i=1; i<=p; i++ )); do

    c[i]=$((i%8)) n[i]=0 l[i]=0

    ((x[i]=RNDSTART==1?RANDOM*w/32768:w/2))

    ((y[i]=RNDSTART==1?RANDOM*h/32768:h/2))

done

 

tput smcup

tput reset

tput civis

while ! read -t0.0$((1000/f)) -n1; do

    for (( i=1; i<=p; i++ )); do

        # New position:

        ((${l[i]}%2)) && ((x[i]+=-${l[i]}+2,1)) || ((y[i]+=${l[i]}-1))

 

        # Loop on edges (change color on loop):

        ((${x[i]}>w||${x[i]}<0||${y[i]}>h||${y[i]}<0)) && ((c[i]=RANDOM%8))

        ((x[i]=(x[i]+w)%w))

        ((y[i]=(y[i]+h)%h))

 

        # New random direction:

        ((n[i]=RANDOM%s-1))

        ((n[i]=(${n[i]}>1||${n[i]}==0)?${l[i]}:${l[i]}+${n[i]}))

        ((n[i]=(${n[i]}<0)?3:${n[i]}%4))

 

        # Print:

        tput cup ${y[i]} ${x[i]}

        [[ $NOCOLOR == 0 ]] && echo -ne "\033[1;3${c[i]}m"

        echo -n "${v:l[i]*4+n[i]:1}"

        l[i]=${n[i]}

    done

    ((r>0 && t*p>=r)) && tput reset && tput civis && t=0 || ((t++))

done

 

clean_up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向良玉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值