⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex79.sh

📁 BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版
💻 SH
字号:
#!/bin/bash# 纸牌: # 处理4人打牌. UNPICKED=0PICKED=1DUPE_CARD=99LOWER_LIMIT=0UPPER_LIMIT=51CARDS_IN_SUIT=13CARDS=52declare -a Deckdeclare -a Suitsdeclare -a Cards#  使用一个3维数组来代替这3个一维数组来描述数据, #+ 可以更容易实现, 而且可以增加可读性. #  或许在Bash未来的版本上会支持多维数组. initialize_Deck (){i=$LOWER_LIMITuntil [ "$i" -gt $UPPER_LIMIT ]do  Deck[i]=$UNPICKED   # 将整副"牌"的每一张都设置为无人持牌的状态.   let "i += 1"doneecho}initialize_Suits (){Suits[0]=C #梅花Suits[1]=D #方块Suits[2]=H #红心Suits[3]=S #黑桃}initialize_Cards (){Cards=(2 3 4 5 6 7 8 9 10 J Q K A)# 另一种初始化数组的方法. }pick_a_card (){card_number=$RANDOMlet "card_number %= $CARDS"if [ "${Deck[card_number]}" -eq $UNPICKED ]then  Deck[card_number]=$PICKED  return $card_numberelse    return $DUPE_CARDfi}parse_card (){number=$1let "suit_number = number / CARDS_IN_SUIT"suit=${Suits[suit_number]}echo -n "$suit-"let "card_no = number % CARDS_IN_SUIT"Card=${Cards[card_no]}printf %-4s $Card# 使用整洁的列形式来打印每张牌. }seed_random ()  # 种子随机数产生器. {               # 如果不这么做, 会发生什么? seed=`eval date +%s`let "seed %= 32766"RANDOM=$seed#  还有其他的方法#+ 能够产生种子随机数么? }deal_cards (){echocards_picked=0while [ "$cards_picked" -le $UPPER_LIMIT ]do  pick_a_card  t=$?  if [ "$t" -ne $DUPE_CARD ]  then    parse_card $t    u=$cards_picked+1    # 将数组索引改为从1(译者注: 数组都是从0开始索引的)开始(临时的). 为什么?     let "u %= $CARDS_IN_SUIT"    if [ "$u" -eq 0 ]   # 内嵌的if/then条件测试.     then     echo     echo    fi    # 分手.     let "cards_picked += 1"  fi  done  echoreturn 0}# 结构化编程: # 将函数中的整个程序逻辑模块化. #================seed_randominitialize_Deckinitialize_Suitsinitialize_Cardsdeal_cards#================exit 0# 练习1:# 完整的注释这个脚本. # 练习2:# 添加一个例程(函数)按照花色打印出每手牌. # 如果你喜欢, 可以添加任何你想要添加的代码. # 练习3:# 简化并理顺脚本逻辑. 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -