zoukankan      html  css  js  c++  java
  • shell 常用案例

    此博文有自己写的其它朋友分享的,其中对其它朋友写的有问题的地方我简单做了一些修改,能保证运行。

    1.写一个脚本通过ping命令测试192.168.0151到192.168.0.254之间的所有主机是否在线?
         如果在线,就显示“ip is up"
         如果不在线,就显示"ip is down"
         答案:
              #!/bin/bash
              for I in `seq 151 254`;do
                  ping -c1 -w1 192.168.0.$I &>/dev/null && echo "192.168.0.$I is up" || echo "192.168.0.$I is down"
              done
         说明:
              1、 ping -c1 -w1 中-c1是指ping的次数,-w是指执行的最后期限,也就是执行的时间,单位为秒;
              2、 &>/dev/null 是指标准输出和错误输出到/dev/null上,而不在界面上显示;
              3、 后面的&&和|| 是与和或得意思,如a&&b||,表示a为真,则执行b;否则执行c
     
    2.写一个脚本:
         1.显示当前系统日期和时间,而后创建目录/tmp/lstest
         2.切换工作目录至/tmp/lstest
         3.创建目录a1d,b56e,6test
         4.创建空文件xy ,x2y,732
         5.列出当前目录下以a,x或者6开头的文件或目录
         6.列出当前目录下以字母开头,后跟一个任意数字,而后跟任意长度字符的文件或目录
         答案:
              #!/bin/bash
              date
              mkdir -pv /tmp/lstest
              cd /tmp/lstest
              mkdir a1d b56e 6test
              touch xy x2y 732
              ls [ax6]*
              ls [[:alpha:]][[:digit:]]*
    3.写一个脚本:
         1.设定变量file的值为/etc/passwd
         2.使用循环读取文件/etc/passwd的第2,4,6,10,13,15行,并显示其内容
         3.把这些行保存至/tmp/mypasswd文件中
         答案:
              #!/bin/bash
              file="/etc/passwd"
              for I in 2 4 6 10 13 15;do
                  exec 3>/tmp/mypasswd
                  line=`head -$I $file  | tail -1`
                  echo "$line"
                  echo "$line" >&3
                  exec 3>&-
              done
     
    4.写一个脚本:
         1.切换工作目录至/var
         2.依次向/var目录中的每个文件或子目录问好,形如:
              (提示:for FILE in /var/*;或for FILE in `ls /var`;)
              Hello,log
         3.统计/var目录下共有多少个文件,并显示出来
         答案:
              #!/bin/bash
              cd /var
              let num=0
              for I in `ls /var/*`;do
                  echo "Hello,$I"
                  num=$[$num+1]
              done
              echo "the number of files is $num"
     
    5.写一个脚本:
         1.设定变量FILE的值为/etc/passwd
         2.依次向/etc/passwd中的每个用户问好,并且说出对方的ID是什么
              形如:(提示: LINE=`wc -l /etc/passwd | cut -d " " -f1`)
              Hello,root, your UID is 0.
         3.统计一个有多少个用户
         答案一:
              #!/bin/bash
              file="/etc/passwd"
              LINES=`wc -l $file | cut -d " " -f 1`
              for I in `seq 1 $LINES `;do
                  userid=`head -$I $file | tail -1 | cut -d : -f 3`
                  username=`head -$I $file | tail -1 | cut -d : -f1`
                  echo "Hell $username,your UID is $userid"
              done
              echo "there are $LINES users"
         答案二:
              #!/bin/bash
              file=/etc/passwd
              let num=0
              for I in `cat $file`;do
                  username=`echo "$I" | cut -d: -f1`
                  userid=`echo "$I" | cut -d: -f3`
                  echo "Hello,$username,your UID is $userid"
                  num=$[$num+1]
              done
              echo "there are $num users"
     
    6.写一个交互脚本,直接运行脚本,出现提示选择一个数字:1:重启httpd服务,2:重启mysqld服务3:重启vsftpd服务,加选项--httpd重启httpd服务,加--mysql会重启mysqld服务,加--ftp会重启vsftpd服务。
         答案:
              #!/bin/bash
              function http(){
                  echo "service httpd restart"
              }
     
              function mysql(){
                  echo "service mysqld restart"
              }
     
              function vsftp(){
                  echo "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 0"
                  esac
              elif [ "$1" == --httpd ];then
                  http;
              elif [ "$1" == --mysqld ];then
                  mysql;
    elif [ "$1" == --vsftpd ];then
                  vsftp;
              else
                  echo "pram error,please try it again 1"
              fi
     
    7.猜数字的小游戏:
         运行程序后,提示用记输入一个0-9的数字,如果是非数字,那么就提示用户输入数字;
         如果用户猜中,提示用户猜对了;
         如果用户没猜中,那么就提示用户重新输入一个数字;
         如果用户连续五次都没有猜中,则提示用户,24小时后再来玩这个游戏;
    #!/bin/bash
    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
        if [ -z ${n} ]
        then
            echo "不能什么都不输入。"
            tag=3
            c=$[$c+1]
            check
        fi
     
        n1=`echo $n|sed 's/[0-9]//g'`
        if [ -n "$n1" ] && [ -n "${n}" ]
        then
            tag=2
            echo "Just number."
            c=$[$c+1]
            check
        elif [ $n -gt 10 ] || [ $n -lt 1 ]
        then
            tag=1
            c=$[$c+1]
            echo "The number must great than 1 and less than 10."
            check
        else
            tag=0
        fi
     
        if [ $n -ne $n2 ]
        then
            echo "Wrong."
            c=$[$c+1]
            check
        else
            echo "Right."
            exit 0
        fi
    done
     
     
    8.写一个脚本:
         1.第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置
         2.如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
         3.如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本。
         答案:
              
    #!/bin/bash
    #auth:liuxiaolei
    #2018-10-11
     
    :<<!
        1.第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置
        2.如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
        3.如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,测返回0给调用脚本,否则,返回52给调用脚本。
    !
     
    while :
    do
        if [ $# -ne 2 ];then
            echo "请输入两个参数:"
            echo "    第一个参数为需要下载的URL"
            echo "    第二个参数为下载到的目录"
            exit
        else
            if [ -d $2 ];then #判断文件是否是目录
                cd $2
                wget $1 &>/dev/null
                a=`echo $?` #得到下载的状态,不报错或是下载成功是0
                if [ $a -ne 0 ];then
                    echo 51
                else
                    echo "下载完成!"
                fi
                exit
            else
                read -p "make dir?(y or n)" chose
                case $chose in
                y)
                    mkdir -p $2
                    ;;
                n)
                    echo 51
                    exit
                    ;;
                *)
                    echo "Only y or n"
                esac
            fi
        fi
    done
    测试结果:

    9.每天生成一个文件
         要求:请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2018-10-11.log,
              并且把磁盘的使用情况写到这个文件中(不用考虑crom,仅仅写脚本即可)
         #!/bin/bash
         #date: 2018年10月11日
         d=`date +%F`
         logname="$d.log"
         df -h > /tmp/$logname
  • 相关阅读:
    进制
    流程控制
    运算符
    格式化输出
    数据结构-树的遍历
    A1004 Counting Leaves (30分)
    A1106 Lowest Price in Supply Chain (25分)
    A1094 The Largest Generation (25分)
    A1090 Highest Price in Supply Chain (25分)
    A1079 Total Sales of Supply Chain (25分)
  • 原文地址:https://www.cnblogs.com/xiqing/p/9772538.html
Copyright © 2011-2022 走看看