linux shell俄罗斯方块

  1. #!/bin/bash  
  2.   
  3. #颜色定义  
  4. cRed=1  
  5. cGreen=2  
  6. cYellow=3  
  7. cBlue=4  
  8. cFuchsia=5  
  9. cCyan=6  
  10. cWhite=7  
  11. colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)  
  12.   
  13. #位置和大小  
  14. iLeft=3  
  15. iTop=2  
  16. ((iTrayLeft = iLeft + 2))  
  17. ((iTrayTop = iTop + 1))  
  18. ((iTrayWidth = 10))  
  19. ((iTrayHeight = 15))  
  20.   
  21. #颜色设置  
  22. cBorder=$cGreen  
  23. cScore=$cFuchsia  
  24. cScoreValue=$cCyan  
  25.   
  26. #控制信号  
  27. #改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;  
  28. #当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。  
  29. sigRotate=25  
  30. sigLeft=26  
  31. sigRight=27  
  32. sigDown=28  
  33. sigAllDown=29  
  34. sigExit=30  
  35.   
  36. #七中不同的方块的定义  
  37. #通过旋转,每种方块的显示的样式可能有几种  
  38. box0=(0 0 0 1 1 0 1 1)  
  39. box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)  
  40. box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)  
  41. box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)  
  42. box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)  
  43. box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)  
  44. box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)  
  45. #所有其中方块的定义都放到box变量中  
  46. box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})  
  47. #各种方块旋转后可能的样式数目  
  48. countBox=(1 2 2 2 4 4 4)  
  49. #各种方块再box数组中的偏移  
  50. offsetBox=(0 1 3 5 7 11 15)  
  51.   
  52. #每提高一个速度级需要积累的分数  
  53. iScoreEachLevel=50  #be greater than 7  
  54.   
  55. #运行时数据  
  56. sig=0       #接收到的signal  
  57. iScore=0    #总分  
  58. iLevel=0    #速度级  
  59. boxNew=()   #新下落的方块的位置定义  
  60. cBoxNew=0   #新下落的方块的颜色  
  61. iBoxNewType=0   #新下落的方块的种类  
  62. iBoxNewRotate=0 #新下落的方块的旋转角度  
  63. boxCur=()   #当前方块的位置定义  
  64. cBoxCur=0   #当前方块的颜色  
  65. iBoxCurType=0   #当前方块的种类  
  66. iBoxCurRotate=0 #当前方块的旋转角度  
  67. boxCurX=-1  #当前方块的x坐标位置  
  68. boxCurY=-1  #当前方块的y坐标位置  
  69. iMap=()     #背景方块图表  
  70.   
  71.   
  72. #接收输入的进程的主函数  
  73. function RunAsKeyReceiver()  
  74. {  
  75.     local pidDisplayer key aKey sig cESC sTTY  
  76.   
  77.     pidDisplayer=$1  
  78.     aKey=(0 0 0)  
  79.   
  80.     cESC=`echo -ne "\033"`  
  81.     cSpace=`echo -ne "\040"`  
  82.   
  83.     #保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。  
  84.     #如果在read -s时程序被不幸杀掉,可能会导致终端混乱,  
  85.     #需要在程序退出时恢复终端属性。  
  86.     sTTY=`stty -g`  
  87.          
  88.     #捕捉退出信号  
  89.     trap "MyExit;" INT TERM  
  90.     trap "MyExitNoSub;" $sigExit  
  91.          
  92.     #隐藏光标  
  93.     echo -ne "\033[?25l"  
  94.   
  95.          
  96.     while (( 1 ))  
  97.     do  
  98.         #读取输入。注-s不回显,-n读到一个字符立即返回  
  99.         read -s -n 1 key  
  100.              
  101.         aKey[0]=${aKey[1]}  
  102.         aKey[1]=${aKey[2]}  
  103.         aKey[2]=$key  
  104.         sig=0  
  105.   
  106.         #判断输入了何种键  
  107.         if [[ $key == $cESC && ${aKey[1]} == $cESC ]]  
  108.         then  
  109.             #ESC键  
  110.             MyExit  
  111.         elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == "[" ]]  
  112.         then  
  113.             if [[ $key == "A" ]]; then sig=$sigRotate   #<向上键>  
  114.             elif [[ $key == "B" ]]; then sig=$sigDown   #<向下键>  
  115.             elif [[ $key == "D" ]]; then sig=$sigLeft   #<向左键>  
  116.             elif [[ $key == "C" ]]; then sig=$sigRight  #<向右键>  
  117.             fi  
  118.         elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate  #W, w  
  119.         elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown    #S, s  
  120.         elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft    #A, a  
  121.         elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight   #D, d  
  122.         elif [[ "[$key]" == "[]" ]]; then sig=$sigAllDown   #空格键  
  123.         elif [[ $key == "Q" || $key == "q" ]]           #Q, q  
  124.         then  
  125.             MyExit  
  126.         fi  
  127.   
  128.         if [[ $sig != 0 ]]  
  129.         then  
  130.             #向另一进程发送消息  
  131.             kill -$sig $pidDisplayer  
  132.         fi  
  133.     done  
  134. }  
  135.   
  136. #退出前的恢复  
  137. function MyExitNoSub()  
  138. {  
  139.     local y  
  140.          
  141.     #恢复终端属性  
  142.     stty $sTTY  
  143.     ((y = iTop + iTrayHeight + 4))  
  144.   
  145.     #显示光标  
  146.     echo -e "\033[?25h\033[${y};0H"  
  147.     exit  
  148. }  
  149.   
  150.   
  151. function MyExit()  
  152. {  
  153.     #通知显示进程需要退出  
  154.     kill -$sigExit $pidDisplayer  
  155.          
  156.     MyExitNoSub  
  157. }  
  158.   
  159.   
  160. #处理显示和游戏流程的主函数  
  161. function RunAsDisplayer()  
  162. {  
  163.     local sigThis  
  164.     InitDraw  
  165.   
  166.     #挂载各种信号的处理函数  
  167.     trap "sig=$sigRotate;" $sigRotate  
  168.     trap "sig=$sigLeft;" $sigLeft  
  169.     trap "sig=$sigRight;" $sigRight  
  170.     trap "sig=$sigDown;" $sigDown  
  171.     trap "sig=$sigAllDown;" $sigAllDown  
  172.     trap "ShowExit;" $sigExit  
  173.   
  174.     while (( 1 ))  
  175.     do  
  176.         #根据当前的速度级iLevel不同,设定相应的循环的次数  
  177.         for ((i = 0; i < 21 - iLevel; i++))  
  178.         do  
  179.             sleep 0.02  
  180.             sigThis=$sig  
  181.             sig=0  
  182.   
  183.             #根据sig变量判断是否接受到相应的信号  
  184.             if ((sigThis == sigRotate)); then BoxRotate;    #旋转  
  185.             elif ((sigThis == sigLeft)); then BoxLeft;  #左移一列  
  186.             elif ((sigThis == sigRight)); then BoxRight;    #右移一列  
  187.             elif ((sigThis == sigDown)); then BoxDown;  #下落一行  
  188.             elif ((sigThis == sigAllDown)); then BoxAllDown;    #下落到底  
  189.             fi  
  190.         done  
  191.         #kill -$sigDown $$  
  192.         BoxDown #下落一行  
  193.     done  
  194. }  
  195.   
  196.   
  197. #BoxMove(y, x), 测试是否可以把移动中的方块移到(x, y)的位置, 返回0则可以, 1不可以  
  198. function BoxMove()  
  199. {  
  200.     local j i x y xTest yTest  
  201.     yTest=$1  
  202.     xTest=$2  
  203.     for ((j = 0; j < 8; j += 2))  
  204.     do  
  205.         ((i = j + 1))  
  206.         ((y = ${boxCur[$j]} + yTest))  
  207.         ((x = ${boxCur[$i]} + xTest))  
  208.         if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))  
  209.         then  
  210.             #撞到墙壁了  
  211.             return 1  
  212.         fi  
  213.         if ((${iMap[y * iTrayWidth + x]} != -1 ))  
  214.         then  
  215.             #撞到其他已经存在的方块了  
  216.             return 1  
  217.         fi  
  218.     done  
  219.     return 0;  
  220. }  
  221.   
  222.   
  223. #将当前移动中的方块放到背景方块中去,  
  224. #并计算新的分数和速度级。(即一次方块落到底部)  
  225. function Box2Map()  
  226. {  
  227.     local j i x y xp yp line  
  228.   
  229.     #将当前移动中的方块放到背景方块中去  
  230.     for ((j = 0; j < 8; j += 2))  
  231.     do  
  232.         ((i = j + 1))  
  233.         ((y = ${boxCur[$j]} + boxCurY))  
  234.         ((x = ${boxCur[$i]} + boxCurX))  
  235.         ((i = y * iTrayWidth + x))  
  236.         iMap[$i]=$cBoxCur  
  237.     done  
  238.          
  239.     #消去可被消去的行  
  240.     line=0  
  241.     for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))  
  242.     do  
  243.         for ((i = j + iTrayWidth - 1; i >= j; i--))  
  244.         do  
  245.             if ((${iMap[$i]} == -1)); then break; fi  
  246.         done  
  247.         if ((i >= j)); then continue; fi  
  248.          
  249.         ((line++))         
  250.         for ((i = j - 1; i >= 0; i--))  
  251.         do  
  252.             ((x = i + iTrayWidth))  
  253.             iMap[$x]=${iMap[$i]}  
  254.         done  
  255.         for ((i = 0; i < iTrayWidth; i++))  
  256.         do  
  257.             iMap[$i]=-1  
  258.         done  
  259.     done  
  260.          
  261.     if ((line == 0)); then return; fi  
  262.   
  263.     #根据消去的行数line计算分数和速度级  
  264.     ((x = iLeft + iTrayWidth * 2 + 7))  
  265.     ((y = iTop + 11))  
  266.     ((iScore += line * 2 - 1))  
  267.     #显示新的分数  
  268.     echo -ne "\033[1m\033[3${cScoreValue}m\033[${y};${x}H${iScore}   "  
  269.     if ((iScore % iScoreEachLevel < line * 2 - 1))  
  270.     then  
  271.         if ((iLevel < 20))  
  272.         then  
  273.             ((iLevel++))  
  274.             ((y = iTop + 14))  
  275.             #显示新的速度级  
  276.             echo -ne "\033[3${cScoreValue}m\033[${y};${x}H${iLevel} "  
  277.         fi  
  278.     fi  
  279.     echo -ne "\033[0m"  
  280.   
  281.   
  282.     #重新显示背景方块  
  283.     for ((y = 0; y < iTrayHeight; y++))  
  284.     do  
  285.         ((yp = y + iTrayTop + 1))  
  286.         ((xp = iTrayLeft + 1))  
  287.         ((i = y * iTrayWidth))  
  288.         echo -ne "\033[${yp};${xp}H"  
  289.         for ((x = 0; x < iTrayWidth; x++))  
  290.         do  
  291.             ((j = i + x))  
  292.             if ((${iMap[$j]} == -1))  
  293.             then  
  294.                 echo -ne "  "  
  295.             else  
  296.                 echo -ne "\033[1m\033[7m\033[3${iMap[$j]}m\033[4${iMap[$j]}m[]\033[0m"  
  297.             fi  
  298.         done  
  299.     done  
  300. }  
  301.   
  302.   
  303. #下落一行  
  304. function BoxDown()  
  305. {  
  306.     local y s  
  307.     ((y = boxCurY + 1)) #新的y坐标  
  308.     if BoxMove $y $boxCurX  #测试是否可以下落一行  
  309.     then  
  310.         s="`DrawCurBox 0`"  #将旧的方块抹去  
  311.         ((boxCurY = y))  
  312.         s="$s`DrawCurBox 1`"    #显示新的下落后方块  
  313.         echo -ne $s  
  314.     else  
  315.         #走到这儿, 如果不能下落了  
  316.         Box2Map     #将当前移动中的方块贴到背景方块中  
  317.         RandomBox   #产生新的方块  
  318.     fi  
  319. }  
  320.   
  321. #左移一列  
  322. function BoxLeft()  
  323. {  
  324.     local x s  
  325.     ((x = boxCurX - 1))  
  326.     if BoxMove $boxCurY $x  
  327.     then  
  328.         s=`DrawCurBox 0`  
  329.         ((boxCurX = x))  
  330.         s=$s`DrawCurBox 1`  
  331.         echo -ne $s  
  332.     fi  
  333. }  
  334.   
  335. #右移一列  
  336. function BoxRight()  
  337. {  
  338.     local x s  
  339.     ((x = boxCurX + 1))  
  340.     if BoxMove $boxCurY $x  
  341.     then  
  342.         s=`DrawCurBox 0`  
  343.         ((boxCurX = x))  
  344.         s=$s`DrawCurBox 1`  
  345.         echo -ne $s  
  346.     fi  
  347. }  
  348.   
  349.   
  350. #下落到底  
  351. function BoxAllDown()  
  352. {  
  353.     local k j i x y iDown s  
  354.     iDown=$iTrayHeight  
  355.   
  356.     #计算一共需要下落多少行  
  357.     for ((j = 0; j < 8; j += 2))  
  358.     do  
  359.         ((i = j + 1))  
  360.         ((y = ${boxCur[$j]} + boxCurY))  
  361.         ((x = ${boxCur[$i]} + boxCurX))  
  362.         for ((k = y + 1; k < iTrayHeight; k++))  
  363.         do  
  364.             ((i = k * iTrayWidth + x))  
  365.             if (( ${iMap[$i]} != -1)); then break; fi  
  366.         done  
  367.         ((k -= y + 1))  
  368.         if (( $iDown > $k )); then iDown=$k; fi  
  369.     done  
  370.          
  371.     s=`DrawCurBox 0`    #将旧的方块抹去  
  372.     ((boxCurY += iDown))         
  373.     s=$s`DrawCurBox 1`  #显示新的下落后的方块  
  374.     echo -ne $s  
  375.     Box2Map     #将当前移动中的方块贴到背景方块中  
  376.     RandomBox   #产生新的方块  
  377. }  
  378.   
  379.   
  380. #旋转方块  
  381. function BoxRotate()  
  382. {  
  383.     local iCount iTestRotate boxTest j i s  
  384.     iCount=${countBox[$iBoxCurType]}    #当前的方块经旋转可以产生的样式的数目  
  385.   
  386.     #计算旋转后的新的样式  
  387.     ((iTestRotate = iBoxCurRotate + 1))  
  388.     if ((iTestRotate >= iCount))  
  389.     then  
  390.         ((iTestRotate = 0))  
  391.     fi  
  392.   
  393.     #更新到新的样式, 保存老的样式(但不显示)  
  394.     for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))  
  395.     do  
  396.         boxTest[$j]=${boxCur[$j]}  
  397.         boxCur[$j]=${box[$i]}  
  398.     done  
  399.   
  400.     if BoxMove $boxCurY $boxCurX    #测试旋转后是否有空间放的下  
  401.     then  
  402.         #抹去旧的方块  
  403.         for ((j = 0; j < 8; j++))  
  404.         do  
  405.             boxCur[$j]=${boxTest[$j]}  
  406.         done  
  407.         s=`DrawCurBox 0`  
  408.   
  409.         #画上新的方块  
  410.         for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))  
  411.         do  
  412.             boxCur[$j]=${box[$i]}  
  413.         done  
  414.         s=$s`DrawCurBox 1`  
  415.         echo -ne $s  
  416.         iBoxCurRotate=$iTestRotate  
  417.     else  
  418.         #不能旋转,还是继续使用老的样式  
  419.         for ((j = 0; j < 8; j++))  
  420.         do  
  421.             boxCur[$j]=${boxTest[$j]}  
  422.         done  
  423.     fi  
  424. }  
  425.   
  426.   
  427. #DrawCurBox(bDraw), 绘制当前移动中的方块, bDraw为1, 画上, bDraw为0, 抹去方块。  
  428. function DrawCurBox()  
  429. {  
  430.     local i j t bDraw sBox s  
  431.     bDraw=$1  
  432.   
  433.     s=""  
  434.     if (( bDraw == 0 ))  
  435.     then  
  436.         sBox="\040\040"  
  437.     else  
  438.         sBox="[]"  
  439.         s=$s"\033[1m\033[7m\033[3${cBoxCur}m\033[4${cBoxCur}m"         
  440.     fi  
  441.          
  442.     for ((j = 0; j < 8; j += 2))  
  443.     do  
  444.         ((i = iTrayTop + 1 + ${boxCur[$j]} + boxCurY))  
  445.         ((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))  
  446.         #\33[y;xH, 光标到(x, y)处  
  447.         s=$s"\033[${i};${t}H${sBox}"  
  448.     done  
  449.     s=$s"\033[0m"  
  450.     echo -n $s  
  451. }  
  452.   
  453.   
  454. #更新新的方块  
  455. function RandomBox()  
  456. {  
  457.     local i j t  
  458.   
  459.     #更新当前移动的方块  
  460.     iBoxCurType=${iBoxNewType}  
  461.     iBoxCurRotate=${iBoxNewRotate}  
  462.     cBoxCur=${cBoxNew}  
  463.     for ((j = 0; j < ${#boxNew[@]}; j++))  
  464.     do  
  465.         boxCur[$j]=${boxNew[$j]}  
  466.     done  
  467.          
  468.   
  469.     #显示当前移动的方块  
  470.     if (( ${#boxCur[@]} == 8 ))  
  471.     then  
  472.         #计算当前方块该从顶端哪一行"冒"出来  
  473.         for ((j = 0, t = 4; j < 8; j += 2))  
  474.         do  
  475.             if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi  
  476.         done  
  477.         ((boxCurY = -t))  
  478.         for ((j = 1, i = -4, t = 20; j < 8; j += 2))  
  479.         do  
  480.             if ((${boxCur[$j]} > i)); then i=${boxCur[$j]}; fi  
  481.             if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi  
  482.         done  
  483.         ((boxCurX = (iTrayWidth - 1 - i - t) / 2))  
  484.   
  485.         #显示当前移动的方块  
  486.         echo -ne `DrawCurBox 1`  
  487.   
  488.         #如果方块一出来就没处放,Game over!  
  489.         if ! BoxMove $boxCurY $boxCurX  
  490.         then  
  491.             kill -$sigExit ${PPID}  
  492.             ShowExit  
  493.         fi  
  494.     fi  
  495.          
  496.          
  497.   
  498.     #清除右边预显示的方块  
  499.     for ((j = 0; j < 4; j++))  
  500.     do  
  501.         ((i = iTop + 1 + j))  
  502.         ((t = iLeft + 2 * iTrayWidth + 7))  
  503.         echo -ne "\033[${i};${t}H        "  
  504.     done  
  505.   
  506.     #随机产生新的方块  
  507.     ((iBoxNewType = RANDOM % ${#offsetBox[@]}))  
  508.     ((iBoxNewRotate = RANDOM % ${countBox[$iBoxNewType]}))  
  509.     for ((j = 0, i = (${offsetBox[$iBoxNewType]} + $iBoxNewRotate) * 8; j < 8; j++, i++))  
  510.     do  
  511.         boxNew[$j]=${box[$i]};  
  512.     done  
  513.   
  514.     ((cBoxNew = ${colorTable[RANDOM % ${#colorTable[@]}]}))  
  515.          
  516.     #显示右边预显示的方块  
  517.     echo -ne "\033[1m\033[7m\033[3${cBoxNew}m\033[4${cBoxNew}m"  
  518.     for ((j = 0; j < 8; j += 2))  
  519.     do  
  520.         ((i = iTop + 1 + ${boxNew[$j]}))  
  521.         ((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))  
  522.         echo -ne "\033[${i};${t}H[]"  
  523.     done  
  524.     echo -ne "\033[0m"  
  525. }  
  526.   
  527.   
  528. #初始绘制  
  529. function InitDraw()  
  530. {  
  531.     clear  
  532.     RandomBox   #随机产生方块,这时右边预显示窗口中有方快了  
  533.     RandomBox   #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落  
  534.     local i t1 t2 t3  
  535.   
  536.     #显示边框  
  537.     echo -ne "\033[1m"  
  538.     echo -ne "\033[3${cBorder}m\033[4${cBorder}m"  
  539.          
  540.     ((t2 = iLeft + 1))  
  541.     ((t3 = iLeft + iTrayWidth * 2 + 3))  
  542.     for ((i = 0; i < iTrayHeight; i++))  
  543.     do  
  544.         ((t1 = i + iTop + 2))  
  545.         echo -ne "\033[${t1};${t2}H||"  
  546.         echo -ne "\033[${t1};${t3}H||"  
  547.     done  
  548.          
  549.     ((t2 = iTop + iTrayHeight + 2))  
  550.     for ((i = 0; i < iTrayWidth + 2; i++))  
  551.     do  
  552.         ((t1 = i * 2 + iLeft + 1))  
  553.         echo -ne "\033[${iTrayTop};${t1}H=="  
  554.         echo -ne "\033[${t2};${t1}H=="  
  555.     done  
  556.     echo -ne "\033[0m"  
  557.   
  558.          
  559.     #显示"Score"和"Level"字样  
  560.     echo -ne "\033[1m"  
  561.     ((t1 = iLeft + iTrayWidth * 2 + 7))  
  562.     ((t2 = iTop + 10))  
  563.     echo -ne "\033[3${cScore}m\033[${t2};${t1}HScore"  
  564.     ((t2 = iTop + 11))  
  565.     echo -ne "\033[3${cScoreValue}m\033[${t2};${t1}H${iScore}"  
  566.     ((t2 = iTop + 13))  
  567.     echo -ne "\033[3${cScore}m\033[${t2};${t1}HLevel"  
  568.     ((t2 = iTop + 14))  
  569.     echo -ne "\033[3${cScoreValue}m\033[${t2};${t1}H${iLevel}"  
  570.     echo -ne "\033[0m"  
  571. }  
  572.   
  573.   
  574. #退出时显示GameOVer!  
  575. function ShowExit()  
  576. {  
  577.     local y  
  578.     ((y = iTrayHeight + iTrayTop + 3))  
  579.     echo -e "\033[${y};0HGameOver!\033[0m"  
  580.     exit  
  581. }  
  582.   
  583.   
  584. #初始化所有背景方块为-1, 表示没有方块  
  585. for ((i = 0; i < iTrayHeight * iTrayWidth; i++))  
  586. do  
  587.     iMap[$i]=-1  
  588. done  
  589.   
  590.   
  591. #游戏主程序在这儿开始.  
  592. if [[ $1 != "--show" ]]  
  593. then  
  594.     bash $0 --show& #以参数--show将本程序再运行一遍  
  595.     RunAsKeyReceiver $! #以上一行产生的进程的进程号作为参数  
  596.     exit  
  597. else  
  598.     #当发现具有参数--show时,运行显示函数  
  599.     RunAsDisplayer         
  600.     exit  
  601. fi  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值