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
  • 相关阅读:
    使用循环计算斐波那契数列
    java 面向过程实现万年历
    学习js回调函数
    序列化和反序列化
    SQL语句增加字段、修改字段、修改类型、修改默认值
    使用SQL语句查询日期(当月天数,当月第一天,当月最后一天,本年最后一天,当月第一个星期) 日期转字符串
    RGB颜色表
    String 与StringBuilder有什么区别
    C# byte数组与Image的相互转换
    CentOS 7 MySQL、Tomcat、Zookeeper设置开机自启
  • 原文地址:https://www.cnblogs.com/xiqing/p/9772538.html
Copyright © 2011-2022 走看看