之前看oldboy的博客时看到的一道题目,虽然当时我没有做,但是收集了在文章评论中比较好的shell/Python脚本,然后自己经过修改、调试,整理出了下面的6个脚本,比较好玩,就分享出来了:
需要一个抓阄的程序,要求:
1、执行脚本后,输入用户名,随机产生01-99之间的数字,前面已经抓到的数字,下次不能再出现;
2、第一个输入用户名后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出,继续等待别的学生输入。
参考答案:
1.考虑得相当细致的shell脚本
#!/bin/bash read -p "Please enter your name:" -t 10 name if [ $? -ne 0 ] then echo -e "n!!!!!!Enter is timeout!!!!!!" exit 1 fi touch temp result cat /dev/null > result #存放最后的结果,格式为:$name is $number cat /dev/null > temp #存放临时的结果,每行内容均为:$number while true do #if [ $(grep ^$name result | wc -l) -ge 1 ] #这里的grep判断有误,比如:输入了haha之后就无法输入用户名h if [ $(grep ^b$nameb result | wc -l) -ge 1 ] #添加b锚定单词 then echo "The name already exists." fi if [ "$name" == "exit" ] then rm temp -f echo "******************************" echo "The result of the top three:" sort -k3rn result | head -3 # sort的各种选项需要好好学习 echo "******************************" exit 1 fi if [ -z $name ] # 这个判断流程的选择可以好好思考思考! then echo "Your name is null." read -p "Please enter your name:" fi number=$(($RANDOM%99+1)) #需要注意空格的使用 if [ $(grep "^$number$" temp | wc -l) -eq 0 ] && [ $(grep ^$name result|wc -l) -eq 0 ];then echo "$name is $number" >> result echo "$name is $number" echo $number >> temp if [ $(cat temp|wc -l) -ge 99 ];then #考虑的真是够细致的! echo -e "The number out of range.n exit!!!" rm temp -f echo "******************************" echo "The result of the top three:" sort -k3rn result|head -3 echo "******************************" exit 1 fi fi echo "Enter 'exit' end the process!" read -p "Please enter your name:" -t 10 name if [ $? -ne 0 ] then echo -e "n!!!!!!Enter is timeout!!!!!!!" echo "******************************" echo "The result of the top three:" sort -k3rn result|head -3 echo "******************************" exit 1 fi sleep 0.1 done
2.比较简单的Python脚本,有很多问题没有考虑
#!/usr/bin/env python
#coding=utf-8
import random
running = True
while running:
name = raw_input('name:')
if not name:
break
print name
a = range(1,99)
slice = random.sample(a, 1) #Python的random.sample()从指定序列中随机获取指定长度{第二个参数}的片段
for i in slice: #这里没有进行重复与否的判断
num = str(i)
print num
f = open('/tmp/user', 'a')
f.write(name + ":::" + num + "n")
f.close
3.比较简单的Python脚本(只管录入不管别的)
#!/usr/bin/env python
#coding=utf-8
import random
import ConfigParser
scores = {}
def saveScore():
config = ConfigParser.RawConfigParser()
#config.read('score.cfg')
config.add_section('score')
for k, v in scores.items():
config.set('score', k, v) #使用set设置k,v值
with open('score.cfg', 'wb') as configfile:
config.write(configfile)
config = None
username = raw_input('请输入姓名:')
while username:
if username and not scores.has_key(username):
score = random.randint(1, 99)
scores[username] = score
print('名字:%s, 得分:%s' % (username, score))
saveScore()
else:
print('请输入正确的名字, 或者名字已经存在 n')
username = raw_input('请输入姓名:')
4.有保存功能的Python脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random, pickle, os, sys
def load():
f = open('list.txt', 'r')
global list
list = pickle.load(f)
return list
f.close()
def save():
f = open('list.txt', 'w')
pickle.dump(list, f)
f.close()
def leave(x):
print ""
print "%sThe TOP Three is:" % x
print 'ID NAME'
print '-----------------------'
for i in list2[-4:-1]: #取列表中最后的3个元素{前面使用了sort函数对列表进行了排序}
print '%s %s'%(i, list1[i])
print '-----------------------'
if not os.path.exists('list.txt'):
f = open('list.txt', 'w')
aa = {'id':'name'}
pickle.dump(aa, f)
f.close()
try:
while True:
digint = random.randrange(01, 100)
list1 = load()
list2 = list1.keys()
list2.sort()
inpu = raw_input("Please input you English name:").strip()
if (list2.index(list2[-1]) == 100) or (inpu == 'exit'):
leave("Now come to the end, ")
sys.exit()
if len(inpu) == 0:
print "don't empty, please input again"
continue
list1 = load()
if inpu in list1.values():
print "system have it's name, please change"
continue
else:
while digint in list1:
digint = random.randrange(01, 100)
continue
else:
list1[digint] = inpu
print "%s's id is %s"%(inpu, digint)
save()
except KeyboardInterrupt:
list1 = load()
list2 = list1.keys()
list2.sort()
leave("")
5.虽然简单但功能挺全的shell脚本
#!/bin/bash [ ! -f file ] && touch file while true; do read -p '输入:' you if [ "$you" == 'exit' ];then break fi if [ -n "$you" ] && ! egrep "^$you.*" file;then while true; do rannum=$(expr $RANDOM % 99 + 1) if ! egrep "$you number is $rannum" file ;then echo "$you number is $rannum" | tee -a file break fi done fi done
6.功能非常全的shell脚本
#!/bin/bash #整个流程就是: #判断输入内容,分为:Null|quit|sort|clear|参与者名字 #当输入正常时,再判断文件大小是否为0,若为0则直接输入;否则根据已有内容判断用户名是否已存在 echo " ##################################################################" echo " # Interesting companies shell practical programming problem #" echo " ##################################################################" echo " # You Can Use : 'quit' to exit shell scripts #" echo " ##################################################################" echo " # 'sort' to sort the order in result file #" echo " ##################################################################" txt=temp.txt touch "$txt" while(true);do read -p " #Please input your name : " name if [ "$name" == "" ];then echo " #WARNING: Username should not be empty! " elif [ "$name" == "quit" ];then exit 0 elif [ "$name" == "sort" ];then cat temp.txt | sort -n #这个貌似没有起到排序的作用? elif [ "$name" == "cl" ] || [ "$name" == "clear" ] ;then clear else if [ -s "$txt" ];then #文件大小非0时为真 a=`grep -w "$name" "$txt" | wc -l` if [ "$a" -gt 0 ];then #当已存在时,则会给出提示-显示已有内容并退出当前循环 echo " #WARNING: name as $name is existing" echo -n " ";grep -w "$name" "$txt" continue else declare -i num=$RANDOM%99+1 #-i选项会把"num"当作整数看待 b=`grep -w "$num" "$txt" |wc -l` if [ "$b" -gt 0 ];then continue else echo -e "$numt$name">>$txt #存入文件的格式 echo -n " ";grep -w "$name" "$txt" fi fi else #当文件大小为0时,表示是第1次进行,直接写入结果即可 declare -i num=$RANDOM%99+1 echo -e "$numt$name" >>$txt echo -n " ";grep -w "$name" "$txt" fi fi done
参考链接:
http://oldboy.blog.51cto.com/2561410/1308647
《“抓阄的游戏脚本”》 有 1 条评论
一个逗比写的各种逗比脚本~
https://github.com/ToyoDAdoubi/doubi
`
ssr.sh 脚本说明: ShadowsocksR 一键安装/管理脚本,支持单端口/多端口切换和管理
ssrmu.sh 脚本说明: ShadowsocksR 一键安装/管理脚本,支持流量控制
ssr_check.sh 脚本说明: ShadowsocksR 批量快速验证账号可用性
ssrstatus.sh 脚本说明: ShadowsocksR 账号在线监控网站
aria2.sh 脚本说明: Aria2 一键安装脚本
`