前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[Linux][bash]更新cowsay和fortune的bash脚本

[Linux][bash]更新cowsay和fortune的bash脚本

作者头像
用户9314062
发布2022-05-20 14:28:50
6170
发布2022-05-20 14:28:50
举报
文章被收录于专栏:LINUX开源玩家LINUX开源玩家

上次更新fortune自定义发现召唤cowsay的bash shell脚本有小概率的bug,就是随机脚本可能超出cows列出图形的数量,这里修补下。

[Linux]自定义fortune显示

就是随机数超出cowsay图形数就重新调用函数再次生成新的随机数

代码语言:javascript
复制
#!/bin/bash

#将变量声明为整数和数组
declare -i i=1
declare -i n
declare -a animals

# cow文件数
cowLine=$(ls -1 /usr/share/cowsay/cows | wc -l)

# 获取随机数(必须小于cow文件数,否则再次执行)
function nlesscowLine() {
    n=$(($(($RANDOM + 1000000000)) % "$1" + 3))
    if [[ $n > $1 ]]; then
        nlesscowLine $1
    fi
}

# 生成cow数组
for animal in $(ls -1 /usr/share/cowsay/cows | sed 's/\.cow$//')
do
  animals[$i]=$animal
  i=$((i+1))
done

nlesscowLine $cowLine

# 获取随机动物名
ANIMAL=${animals[$n]}

/usr/games/fortune-zh | /usr/games/cowsay -f $ANIMAL

测试执行N次,得到一个例子,如下:

代码语言:javascript
复制
+ declare -i i=1
+ declare -i n
+ declare -a animals
++ ls -1 /usr/share/cowsay/cows
++ wc -l
+ cowLine=49
++ ls -1 /usr/share/cowsay/cows
++ sed 's/\.cow$//'
+ for animal in $(ls -1 /usr/share/cowsay/cows | sed 's/\.cow$//')
+ animals[$i]=apt
+ i=2
+ for animal in $(ls -1 /usr/share/cowsay/cows | sed 's/\.cow$//')
+ animals[$i]=beavis.zen
+ i=3
+ for animal in $(ls -1 /usr/share/cowsay/cows | sed 's/\.cow$//')
+ animals[$i]=bong
...
+ i=49
+ for animal in $(ls -1 /usr/share/cowsay/cows | sed 's/\.cow$//')
+ animals[$i]=www
+ i=50
+ nlesscowLine 49
+ n=50
+ [[ 50 > 49 ]]
+ nlesscowLine 49
+ n=40
+ [[ 40 > 49 ]]
+ ANIMAL=suse
+ /usr/games/fortune-zh
+ /usr/games/cowsay -f suse
 __________________________________
/ 一壶酒,一竿身,快活如侬有几人。\
|                                  |
\ -- 李煜《渔父·浪花有意千里雪》   /
 ----------------------------------
  \
   \____
  /@    ~-.
  \/ __ .- |
   // //  @

程序中cowsay图形文件(cowLine)一共49个,第一次执行nlesscowLine产生随机数n=50,50>49,于是再次执行nlesscowLine 49,产生新的随机数n=40,40 < 49,这个序号在数组中对应的cowsay图形是suse(一个老牌的linux发行商,其logo据说是变色龙)。

PS: 每天都在用Linux办公,每天开启bash无数次,虽然这个概率不大,可都一年多了,也可见我的粗心大意...

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LINUX开源玩家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档