标签: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