Shell 练习题 31-40题,内附答案

31-40题
31、写一个交互脚本,直接运行脚本,出现提示,选择一个数字:1:重启 httpd 服务,2:重启 mysqld 服务 3:重启vsftpd服务,加选项--httpd重启 httpd 服务,加 --myslq 会重启 myslqd 服务,加 --ftp 会重启vsftpd服务。
32、猜数字的小游戏;
运行程序后,提示用户输入一个0-9的数字,如果是非数字,那么就提示用户输入数字;如果用户猜中,提示用户猜对了;如果用户没有猜中,那么就提示用户重新输入一个数字;如果,用户连续五次都没有猜中,则提示用户,24小时后再来玩这个游戏;
33、提示用户输入网卡的名字,然后我们用脚本输出网卡的ip。
34、脚本可以带参数也可以不带,参数可以有多个,每个参数必须是一个目录,脚本检查参数个数,若等于0,则列出当前目录本身;否则,显示每个参数包含的子目录。
35、
  • 第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
  • 如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
  • 如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;
36、用 for 循环列出当前目录的一级子目录,不要用 find 命令
37、打印乘法口诀
38、写一个脚本,让用户输入一个数字,然后判断是否是数字,如果是数字,则打印数字,否则一直让用户输入,直到是数字为止。参考第16题。16题没有循环。
39、while 循环实现每隔 10s 执行一次 w 命令
40、while 循环求数字1 到 10 相加的和



31、
#!/bin/bash
# auth:wuhen 
# copy from wuhen
function http(){
  service httpd restart
}

function mysql(){
  service mysqld restart
}

function vsftp(){
  service vsftpd restart
}



if [ -$# -eq 0 ];then
  echo "Please choose one num:"
  echo "1:Restart httpd"
  echo "2:Restart mysqld"
  echo "3:Restart vsftpd"
  read -p "Enter your choose:" num

  case $num in
    1)
       http
       ;;
    2)
       mysql
       ;;
    3)
       vsftp
       ;;
    *)
       echo "pram error, please try it again"
  esac
elif [ "$1" == "--httpd" ];then
        http
elif [ "$1" == "--mysqld" ];then
        mysql
elif [ "$1" == "--vsftpd" ];then
        vsftp
else
echo "pram error, please try it again"
fi


32、
#!/bin/bash
# auth: Cityzen Wang
function check() {
    if [ $c -eq 5 ]
        then
            echo "Wait 24 hours."
            exit 1
        else
            continue
        fi
}
n2=6
c=0
while :
do
    read -p "Please input a number(1-10): " n
    n1=`echo $n|sed 's/[0-9]//g'`
    if [ -n "$n1" ]
    then
        tag=2
        echo "Just number."
        c=$[$c+1]
        check
    elif [ $n -gt 10 ] || [ $n -lt 1 ]
    then
        tag=1
        c=$[$c+1]
        check
        echo "The number must great than 1 and less than 10."
    else
        tag=0
        c=$[$c+1]
        check
    fi
    if [ $tag -ne 0 ]
    then
        continue
    elif [ $n -ne $n2 ]
    then
        echo "Wrong."
        c=$[$c+1]
        check
    else
        echo "Right."
        exit 0
    fi
done


33、这个还不完整,输入 lo 会返回127地址,还会返回 no such card lo
死循环
#!/bin/bash 
while :
do
    read -p "Please insert network name: " name
    for list in `ls /etc/sysconfig/network-scripts/ifcfg-* |awk -F '-' '{print $3}'`
    do
    if [ $name = $list ]
    then
        ifconfig | grep -A2 $name | grep Mask| awk '{print $2}' |awk -F ':' '{print $2}'
        exit
    else
        echo "No such card $name"
    fi
    done
done


34、
#!/bin/bash
#auth: Cityzen Wang
#date 2017-04-25
if [ $# -eq 0 ]
then
   echo "ls -l"
   ls -l `pwd`
else
    for i in `seq 1 $#`
    do
        n=`echo $@ | cut -d " " -f $i`
        echo "ls $n"
      #  m=`ls -l $n | grep '^d' | wc -l`
      #  if [ $m -eq 0 ]
      #  then
      #      echo "No Directory"
      #  else
            ls -l $n | grep '^d'
      #  fi
    done
fi


35、
#! /bin/bash
# auth: Cityzen Wang
# 2017-04-25
while :
do
    if [ $# -gt 2 ]; then
        echo "too much options"
        exit
    else
        if [ -d $2 ]; then
            cd $2
            wget $1
            a=`echo $?`
            if [ $a -ne 0 ];then
                echo 51
            fi
            exit
        else
            read -p "make dir?" chose
            case $chose in
            y)
               mkdir -p $2
               ;;
            n)
               echo 51
               exit
               ;;
            *)
               echo "Only y or n"
               ;;
            esac
        fi
    fi
done


36、
#!/bin/bash
#auth: Cityzen Wang
#date: 2017-04-25
for i in `ls`
do
    if [ -d $i ]; then
        echo $i
    fi
done

不要加 else exit

37、
#! /bin/bash
#auth: Cityzen Wang
#Date: 2017-04-26
for m in `seq 1 9`
do
    for n in `seq 1 $m`
    do
        dd=$[$n*$m]
        echo  -n "$n X $m = $dd "
    done
    echo -e "\n"
done


38、自己写
#!/bin/bash
#Cityzen Wang
#2017-04028
while :
do
    read -p "Please input a number: " m
    n=`echo $m | sed 's/[0-9]//g'`

    if [ -n "$n" ];then
        echo "numbers only"
    else
        echo $m
        exit
    fi
done
铭哥答案
#!/bin/bash
while :
do
    read -p "Please input a number: " n
    n1=`echo $n|sed 's/[0-9]//g'`
    if [ -z $n1 ]
    then
        echo $n
        exit 0
    else
        continue
    fi
done

39、
#! /bin/bash
#Auth: Cityzen Wang
#Date: 2017-04-30
#Script: do command w every ten seconds
while :
do
    sleep 10
    w
done


40、
#! /bin/bash
#Script: Count 1 to 10
#Auth: Cityzen Wang
#Date:Last day in Apri
sum=0
i=0
while [ $i -lt 10 ]
do
    i=$[$i+1]
    sum=$[$sum+$i]
done
echo $sum



你可能感兴趣的:(shell)