zoukankan      html  css  js  c++  java
  • shell_Day01

    1、判断/etc/inittab文件是否大于100行,如果大于,则显示”/etc/inittab is a big file.”否者显示”/etc/inittab is a small file.”
     
    #!/bin/bash
    if [ `wc -l /etc/inittab | awk '{print $1}'` -gt 100 ] ;then
            echo ”/etc/inittab is a big file.”
    else
            echo ”/etc/inittab is a small file.”
    fi
    2、给定一个用户,来判断这个用户是什么用户,如果是管理员用户,则显示“该用户为管理员”,否则显示“该用户为普通用户”
     
    #!/bin/bash
    if [ `whoami` == "root" ] ;then
            echo "该用户为管理员"
    else
            echo "该用户为普通用户"
    fi
    3、判断某个文件是否存在
     
     
    #!/bin/bash
    if [ -e $1 ];then
            echo "存在"
    else
            echo "不存在"
    fi
     
     
    4、判断当前系统上是否有用户的默认shell程序是否为bash程序,如果有,就显示有多个这类用户,否则就显示没有这类用户;【并且显示出那些用户是 bash】
     
    #!/bin/bash
    if [ ` grep "bash$" /etc/passwd |cat -n| awk '{print $1}'` -gt 0 ] ;then
            echo `grep "bash$" /etc/passwd | awk -F ":" '{print $1}'`
    else
            echo "没有这类用户"
    fi
     
    5、写出一个脚本程序,给定一个文件,比如:/etc/inittab a、判断这个文件中是否有空白行? b、如果有,则显示其空白行的行号,否则显示没有空白行
     
    #!/bin/bash
    `awk '/^$/{print NR}' /etc/inittab`
    if [ $? -gt 0 ];then
            echo ""
            echo `awk '/^$/{print NR}' /etc/inittab`
    else
            echo "没有"
    fi
        #!/bin/bash
        #
        
        B=`grep -n "^[[:space:]]*$" /etc/inittab | wc -l`
        C=`grep -n "^[[:space:]]*$" /root/abc | cut -d: -f1`
        
        if [ $B -eq 0 ] ; then
            echo "没有空白行"
            exit 1
        else
            echo  "有空白行,空白行为 $C 行"
            exit 0
        fi 
     
    6、写一个脚本程序,给定一个用户,判断其UID与GID是否一样,如果一样,就显示该用户为“good guy”,否则显示为“bad guy”
     
     #!/bin/bash
     #
     for i in $(cat /etc/passwd);do  
      if [ `cut -d: -f3 $i` = `cut -d: -f4 $i` ];then
       echo "good guy"
       exit 0
      else
       echo "bad guy"
       exit 1
      fi
     done
     
    7、写一个脚本程序,给定一个用户,获取其密码警告期限;然后判断用户最近一次修改密码的时间距离今天是否已经小于警告期限;
    8、判断命令历史中历史命令的总条目是否大于1000,如果大于,则显示“some command will gone”,否则显示OK
     
    #!/bin/bash
    a=`history | tr -s [:space:]|tail -1|awk '{print $1}'`
    if [ $a > 1000 ];then
            echo "some command will gone."
    else
            echo "OK"
    fi
    9、给定一个文件,如果是普通文件,就显示出来,如果是目录文件,也显示出来,否则就显示“无法识别”
    #!/bin/bash
    if [ -f `ls /etc/inittab` ];then
     echo “普通文件”
    elif [ -d `ls /etc/inittab` ];then
     echo ”目录文件“
    else
     echo "无法识别"
    fi

    10、写一个脚本,能接受一个参数(文件路径),判断这个参数如果是一个存在的文件就显示“ok”,否则显示“No such file”
     
    #!/bin/bash  
     read -p "请输入一个文件路径:" filename
     
     if [ -e $filename ];then
      echo "OK"
     else
      echo "No such file"
     fi
    11、写一个脚本,给脚本传递两个参数,显示两则之和和两者之积
     
    #!/bin/bash
    if [ $# -lt 2 ]; then
        exit 8
    fi
        echo "$[$1+$2]"
        echo "$[$1*$2]"

       编写脚本,每天02:20   备份/etc/目录中所有文件,名称为当天日期;且保存文件为压缩文件;

        crontab -e -- 20 2 * * * /root/xxx.sh
        vim xxx.sh
            #!/bin/bash
            #
            tar cJvf /var/`date +%F`.xz /etc/
        chmod +x xxx.sh
        

      将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中;

    head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out

      将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中;

    who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee /tmp/who.out

      显示/proc/meminfo文件中大小s开头的行

    grep -i "^s" /proc/meminfo

      显示/etc/passwd文件中不以/bin/bash结尾的行

        grep -v "/bin/bash$" /etc/passwd


      显示/etc/passwd文件中UID号最大的用户的用户名

        sort -n -t: -k3 /etc/passwd | tail -1 | cut -d: -f1


      如果用户root存在,显示其默认的shell程序

        grep "^root\>" /etc/passwd &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 
        id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f7 


      找出/etc/passwd中的两位或三位数

        grep "[0-9]\{2,3\}"  /etc/passwd

      显示/etc/rc.d/rc.sysinit文件中,至少以一个空白字符开头的且后面为非空白字符的行

        grep "^[[:space:]]\+.*[^[:space:]]$" /etc/rc.d/rc.sysinit


      找出”netstat -tan”命令的结果中,以“LISTEN”后跟0、1或多个空白字符结尾的行

        netstat -tan | grep "LISTEN[[:space:]]*$"


      添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行

     useradd bash
     useradd testbash
     useradd basher
     useradd -s /sbin/nologin nologin
     grep "\(^[[:alnum:]]\+\>\).*\1$" /etc/passwd

      输入一个设备文件,输出这个设备文件的基本信息;

     
    read -t 5 -p "输入一个设备文件名:" devname
        [ -z $devname ] && fdisk -l && exit 1
    
        if [ -b /dev/$devname ];then
            fdisk -l /dev/$devname
            exit 0
        else
            echo "$devname 不是设备文件"
            echo "Usage:'请输入一个设备文件,如 sda'"
        fi

      99乘法表:

    for i in `seq 9`;do
                for j in `seq 9`;do
                    [ $j -le $i ] && echo -n -e "$i*$j=`echo $(($i*$j))`\t" 
                done
                echo " "
            done

      写一个for循环--遍历本网络网段中所有up的电脑

    declare -i sum=0
    
            for i in $(seq 1 100);do
                      ping -c 1 -w 1 10.6.12.$i &> /dev/null
                        if [ $? -eq 0 ];then
                                let sum++
                                echo "10.6.12.$i 是通的"        
                       else
                                echo "10.6.12.$i 是不通的"
                        fi
            done
    
            echo "总共有 $sum 台电脑在线"

      1到100的偶数和

    declare -i sum=0
    
            for i in $(seq 0 2 100);do
                let sum+=$i
            done
    
            echo “总数为:$sum

      判断 /var/log/ 的所有文件,以 .log 结尾的文件统计处理啊,并显示:

            declare -i sum=0
    
            for i in $(ls /var/log/);do
                if [ "*.log" = $i ];then
                    echo $i
                    let sum++
                fi
            done
            
            echo ".log结尾的文件有:$sum"

      通过位置变量创建linux系统账户及密码

    useradd "$1"
    echo "$2" | passwd --stdin "$1"

      每周5使用tar命令备份/var/log 下的所有日志文件,防止文件覆盖  

     
    tar czf /var/log/date +%F-%H`.bak.zip /var/log
    
    crontab -e 
    * * * * 5 /root/tar.sh

      实时监控本机内存和硬盘剩余空间,剩余内存小于500M,根分区剩余空间小于1000M的时候发送报警邮件

    disk_size=$(df / | awk '/\//{print $4}' )
    mem_size=$(free | awk '/mem/{print $4}')
    while true;do
        if [ $disk_size -le 512000 -a $mem_size -le 1024000 ];then
            mail -s "Warning" root << EOF
                资源不足
            EOF
        fi
    done

       脚本生成一个 100 以内的随机数值,提示用户猜数字,更具用户的输入,提示用户猜对了,猜打了或猜小了,直至用户猜对脚本结束。

    num=$[RANDOM%100+1]
    echo "$num"
    while true;do
        read -p "计算机生成一个 1-100 的随机数,你猜:" cai
        fi [ $cai -eq $num ];then
            echo "猜对了"
        elif [ $cai -gt $num ];then
            echo "才打了"
        else
            echo "猜小了"
        fi
    done

      检测本机当前用户是否为超级管理员,如果是管理员,使用 yum 安装 vsftpd,如果不是,则提示您非管理员,使用字串对比版本

    if [ $USER == "root" ];then
        yum -y install vsftpd
    else
        echo "您不是管理员,没有权限"
    fi

      斐波那契数列

    fab(){
            if [ $1 -eq 1 ];then
                echo 1
            elif [ $1 -eq 2 ];then
                echo 1
            else
                echo $[$(fab $[$1-1])+$(fab $[$1-2])]
            fi
        }
        fab 7

      统计 /var/log/*.log 中 索引为偶数 的文件 的行数的 和;

           a=(/var/log/*.log)
                for i in {0..7};do
                    if [ $[$i%2] -eq 0 ];then
                        line=`wc -l ${a[$i]} | cut -d' ' -f1`
                        sum+=$line       # sum+=`wc -l ${a[$i]} | cut -d' ' -f1`   # sum+=$(wc -l ${a[$i]} | cut -d' ' -f1)
                    fi
                done
                echo $sum

      生成10个随机数,打印其中最大的数值

    declare -a a
            declare -i max=0
                
            for i in `seq 0 9`;do
                 a[$i]=$RANDOM
                [ ${a[$i]} -gt $max ] && max=${a[$i]}
            done
            echo ${a[@]}
            echo "最大值为:$max"

      判断/^r..ter/,/^user.*\>/之间的行的用户,是bash的用户,并显示用户的用户名,和UID

    for i in `awk '/^r..ter/,/^user.*\>/{print $NF}' /etc/passwd`;do
                if [[ $i == "/bin/bash" ]];then
                    echo ``
                fi
            done
    
            while line;do
                if [[ "/bin/bash" == `awk -F: '{print $NF}' $line` ]];then
                    awk -F '{print $1,$3}' $line
                fi
            done << `sed -n '/^r..ter/,/^user.*\>/p' /etc/passwd`

      监控某个固定网站的HTTP服务器的状态(测试返回码)

    url=http://www.baidu.com
    check_http(){
            status_code=$(curl -m 5 -s -o /dev/null -w %{http_code} $url)
    }
    while true;do
            check_http
            date=$(date +%Y%m%d-%H:%M:%S)
            echo "当前时间为:$date"
            echo "$url 服务异常,状态码为${status_code}.请尽快排查异常" > /tmp/http$$.pid
            
            if [ $status_code -ne 200 ];then
                    mail -s Warning root < /tmp/http$$.pid
            else
                    echo "$rul连接正常" >> /var/log/http.log
            fi
            sleep 5
    done

      显示CPU厂商信息

    awk '/vendor_id/{print $3}' /proc/cpuinfo

    作者: 千纪

    出处: https://www.cnblogs.com/diyudewudao/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, https://www.cnblogs.com/diyudewudao/ 如有问题, 可邮件(diyudewudao@qq.com).

    注:不要在意标题,在某些情况下名字都只是个代号不是。

  • 相关阅读:
    jmeter接口测试 Base64加密(函数助手添加自定义函数)
    jmeter接口测试 上传文件(multipart/formdata数据请求)
    python入门_模块2
    python_元类
    python day03_ 文件处理
    Python入门day04_函数与装饰器
    python_字符编码
    三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
    JavaScriptproperty
    我在博客园的第一个博客
  • 原文地址:https://www.cnblogs.com/diyudewudao/p/11311817.html
Copyright © 2011-2022 走看看