根据名字得数字

题目要求

写一个shell脚本,能实现如下需求:  

  1. 执行脚本后,提示输入名字(英文的,可以是大小写字母、数字不能有其他特殊符号),然后输出一个随机>的0-99之间的数字,脚本并不会退出,继续提示让输入名字
  2. 如果输入相同的名字,输出的数字还是第一次输入该名字时输出的结果
  3. 前面已经输出过的数字,下次不能再出现
  4. 当输入q或者Q时,脚本会退出。
参考答案
#!/bin/bash
f=/tmp/user_number.txt
j_n()
{
    while :
    do
        n=$[RANDOM%100]
        if awk '{print $2}' $f|grep -qw $n
        then
            continue
        else
            break
        fi
    done
}
while :
do
    read -p "Please input a username: " u
    if [ -z "$u" ]
    then
        echo "请输入用户名."
        continue
    fi

    if [ $u == "q" ] || [ $u == "Q" ]
    then
        exit
    fi 

    u1=`echo $u|sed 's/[a-zA-Z0-9]//g'`
    if [ -n "$u1" ]
    then
        echo "你输入的用户名不符合规范,正确的用户名应该是大小写字母和数字的组合"
        continue
    else
        if [ -f $f ]
        then
            u_n=`awk -v uu=$u '$1==uu {print $2}' $f`
            if [ -n "$u_n" ]
            then
                echo "用户$u对应的数字是:$u_n"
            else
                j_n
                echo "用户$u对应的数字是:$n"
                echo "$u $n" >>$f
            fi
        else
            j_n
            echo "用户$u对应的数字是:$n"
            echo $u $n >> $f
        fi
    fi
done

转载于:https://my.oschina.net/u/3954059/blog/3102586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值