shell练习题

980人浏览 / 0人评论

练习题

1、输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果**

#!/bin/sh
read -p "请输入一个数字:" s
if [[ ! $s =~ ^[0-9]+$ ]];then
read -p "error 请重新输入:"
fi
read -p "请输入一个数字:" a
if [[ ! $s =~ ^[0-9]+$ ]];then
read -p "error 请重新输入:"
fi
echo "$s+$a=$(($a+$s))"
echo "$s-$a=$(($s-$a))"
echo "$s/$a=$(($s/$a))"
echo "$s*$a=$(($s*$a))"

2、打印下面这句话中字母数小于5的单词 I am liangzeyu teacher I am 18

for n in I am oldboy teacher I am 30
	do
	         if [ ${#n} -lt 3 ]
	        then
	                echo $n
	        fi
	done

3、写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10

history |awk '{print $2}'|sort -n|uniq -c|sort -nr|head 

4、编写一个脚本,计算100以内所有能被3整除数字的和

sum=0
for n in `seq 1 100`
do 
s=`awk  "BEGIN{print $n/3}"`
if [[ ${#s} -eq 1 ]]||[[ ${#s} -eq 2 ]];then
 sum=`expr $sum + $n`	 
fi
done 
echo $sum

5、写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些

#!/bin/sh
ip=10.0.0.
for i in `seq 1 254`
do
IP=${ip}$i
ping -c 2 $IP >/dev/null
if [ $? -eq 0 ];then
echo $IP
fi
done

6、按单词出现频率降序排序

the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation
word(){
  echo $str|sed 's#[^a-zA-Z]#\n#g'|grep -v "^$"|sort|uniq -c|sort -rn -k1
}
#no2按字母出现的频率降序排序
string(){
  echo $str|grep -o "."|egrep -v "[^a-zA-Z]"|sort|uniq -c|sort -rn -k1
}
menu(){
  cat <<END
  输入数字1:按单词出现的频率降序排序
  输入数字2:按字母出现的频率降序排序
END
  read -p "Pls you choose num:" num
}
menu
usage(){
  echo "USAGE:You muset choose 1 or 2"
  exit 1
}
case "$num" in
  1)
    word
    ;;
  2)
    string
    ;;
  *)
    usage
esac

cat 1.txt |xargs -n1|sort |uniq -c|sort -nr

7、猜数字-写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比语塞数字大或者小

#!/bin/bash
sum=`echo $((RANDOM%100))`
i=1
while true
read -p "请输入一个幸运数字:" pp
do
if [ $sum -gt $pp ];then
 echo "小老弟你输入的有点小鸭"
elif [ $sum -lt $pp ];then
 echo "小老弟你输入的有点大鸭"
else
echo "恭喜你获得100万元人民币"
break
Fi
Let i++
done
echo "您共用了$i次机会"

8、查看磁盘/当前使用状态,如果使用率超过80%则把结果输出到/var/log/df.err

#!/bin/bash
a=`df -h|awk 'NR==2{print $5}'`

if [ ${a%\%} -gt 80 ];then
        echo "磁盘超过百分之80,$a";echo $a >/var/log/disk.err
else
echo "磁盘正常"
fi

9、批量创建用户- **脚本批量创建10个用户,密码统一为123,需要对用户输入是否为数字和输入的名字是否为空做判断

#!/bin/sh
q=1
read -p "请输入创建的前缀:" sum
 [ -z $sum ]&&echo '请输入正确的前缀'
read -p "请输入创建几个用户:" sun
if [[ ! $sun =~ ^[a-Z]+$ ]];then
echo "请输入正确的数字"
fi
read -p "请输入设置的密码:" m
for i in `seq $q $sun`
do
useradd ${sum}$i
if [ $? -eq 0];then
echo "创建用户成功"
fi
echo $m |passwd --stdin ${sum}$i
if [ $? -eq 0 ];then
echo "设置密码正确"
fi
done

10、抓阄

好消息,学生外出企业项目实践机会(第6次)来了(本月中旬),但是,名额有限,队员限3人(班长带队)。因此需要挑选学生,因此需要一个抓阄的程序:

要求:

1、 执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。

2、 第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。

#!/bin/sh
[ -f /tmp/2.txt ] || touch /tmp/2.txt
#echo -e "101\tbanzhang" >/tmp/2.txt
while :
do
Ran=`echo $((RANDOM%10+1))`
      #if [ `awk '{print $1}' /tmp/2.txt |sort |uniq -c|sort -nr|awk 'NR==1{print $1}'` -eq 1 ];then
      if [ `grep -w $Ran /tmp/2.txt|wc -l` -eq 1 ];then
continue
      fi
read -p "请输入组员的信息:" num
if [[ $num  =~ [0-9] ]];then
   echo "请输入英文全拼"
   continue
fi
echo -e "${Ran}\t${num}" >>/tmp/2.txt
echo -e "${Ran}\t${num}"
if [ `cat /tmp/2.txt|wc -l` -ge 9 ];then
   echo "=============================="
   echo "以下几人可以去happy"
   sort -k1nr /tmp/2.txt |sed -n 1,3p
   break
fi
done

11、打印一个菜单如下,然后用循环加case语句输出用户输入菜单选项的结果

h 显示命令帮助

f 显示登陆信息

d 显示磁盘挂载

m 查看内存使用

u 查看系统负载

q 退出程序

#!/bin/sh
caidan(){
cat<<EOF
         h 显示命令帮助    
         f 显示登陆信息 
         d 显示磁盘挂载 
         m 查看内存使用 
         u 查看系统负载 
         q 退出程序
EOF
}
caidan
while true
do
        read -p "请输入你要查看的系统信息:[h|f|d|m|u|q]" s
        case $s in
        h)
        clear
        caidan
        ;;
        f)
        w
        ;;
        d)
        df -h
        ;;
        m)
        free -m
        ;;
        u)
        uptime
        ;;
        q)
        exit 1
        ;;
        *)
        read -p "请输入你要查看的系统信息:[h|f|d|m|u|q]" s
        esac
done

12、生成0-100之间的随机数,并相加,直到大于1000,输出相加的结果

#!/bin/sh
we=0
while true 
do
i=`echo $((RANDOM%100))`
we=$(($we+$i))
if [ $we -gt 1000 ];then
echo $we
exit
fi
done

全部评论