标签:shell
习题1:打印只有一个数字的行要求:如题,把一个文本文档中只有一个数字的行给打印出来
参考答案:
#!/bin/bash # date:2018年3月16日 f=/etc/group line=`wc -l $f|awk '{print $1}'` for l in `seq 1 $line` do n=`sed -n "$l"p $f|grep -o '[0-9]'|wc -l` if [ $n -eq 1 ] then sed -n "$l"p $f fi done
习题2:抽签脚本
要求:
1、写一个脚本执行后,输入名字,产生随机数01-99之间的数字。
2、如果相同的名字重复输入,抓到的数字还是第一次抓取的结果,
3、前面已经抓到的数字,下次不能在出现相同数字。
4、第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出
继续等待别的学生输入。
参考答案:
#!/bin/bash # date:2018年3月16日 while : do read -p "please input your name:" name if [ -f /tmp/draw.log ];then a=`cat /tmp/draw.log | awk -F ":" '{print $1}'| grep "$name"` if [ "$a" != "$name" ];then number=`echo $RANDOM |awk -F "" '{print $2 $3}'` while : do c=`cat /tmp/draw.log |awk -F ":" '{print $2}'|grep "$number"` if [ "$number" == "$c" ];then echo "number exist." number=`echo $RANDOM | awk -F "" '{print $2 $3}'` else break fi done echo "$name:$number"|tee -a /tmp/draw.log else number=`cat /tmp/draw.log | grep "$name" | awk -F ":" '{print $2}'` echo $number echo "repeat name." fi else number=`echo $RANDOM |awk '{print $2 $3}'` echo "$name: $number"|tee -a /tmp/draw.log fi done
习题3:猜数字
要求:写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个小于100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比预设数字大或者小。
参考答案:
#!/bin/bash # date:2018年3月16日 n=`echo $RANDOM |awk -F "" '{print $2 $3}'` while : do read -p "please guess in [0-99]:" m expr $m + 1 >/dev/null 2>&1 if [ $? -ne "0" ];then echo -e "\033[41;37m please input number! \033[0m" continue fi if [ $n -eq $m ];then echo -e "\033[34m bingo! \033[0m" exit elif [ $n -lt $m ];then echo "bigger!" continue else echo "smaller!" continue fi done
习题4:下载文件
要求:创建一个函数,能接受两个参数:
1.第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
2.如果用户给的目录不存在,则创建目录
3.如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则>返回0给调用脚本,否则,返回2给调用脚本;
参考答案:
#!/bin/bash # date:2018年3月16日 if [ $# -ne 2 ];then echo "Usage $0 URL dirname" exit 1 fi [ ! -d $2 ] && mkdir -p $2 cd $2 wget $1 if [ $? -eq 0 ];then echo "download ok!" exit 0 else echo "fail!!!" exit 2 fi
习题5:列出子目录
要求:脚本可以带参数也可以不带,参数可以有多个,每个参数必须是一个目录,脚本检查参数个数,若等于0,则列出当前目录本身;否则,显示每个参数包含的子目录
参考答案:
#!/bin/bash # date:2018年3月16日 if [ $# == 0 ];then ls -ld `pwd` else for i in `seq 1 $#` do a=$i echo "ls ${!a}" ls -l ${!a} |grep '^d' done fi
习题6:获取网卡ip
要求:提示用户输入网卡的名字,然后我们用脚本输出网卡的ip。 看似简单,但是需要考虑多个方面,比如我们输入的不符合网卡名字的规范,怎么应对。名字符合规范,但是根本就没有这个网卡有怎么应对
参考答案:
#!/bin/bash # date:2018年3月16日 while : do read -p "please input a network name: " e e1=`echo "$e" | sed 's/[0-9]//g'` e2=`echo "$e" | sed 's/[a-zA-Z]//g'` if [ -z $e ];then echo "you input nothing" continue elif [ -z $e1 ];then echo "you input number? but network name start with ens+number. " continue elif [ -z $e2 ];then echo "you input letter ? but network named ens+number " continue else break fi done ip(){ ifconfig| grep -wA1 "$1:"|tail -1|awk '{print $2}' } myip=`ip $e` if [ -z $myip ];then echo "sorry, the network $e is not exist." else echo "your network ip is: $myip" fi
标签:shell
原文地址:http://blog.51cto.com/11924224/2087730