• shell编程


    1.查看当shell中变量:本地和环境变量的命令:set

      查看当前shell中的环境变量:printenv/env/export

    2.变量存入到内存中是字符串

    3.#!/bin/bash <--表示需要Linux调用Linux内核解释器才能执行

    4.显示所有以数字结尾且文件名中不包含空白的文件:ls *[^[:space:]]*[0-9]

    5.重定向:>覆盖重定向      >> 追加重定向       2> 错误覆盖重定向  2>>错误追加重定向  &> 全部重定向

    6.管道:管道线前面的命令结果作为后面命令的参数

    shell编程实例

    mkdir shell

    cd shell

    查看时sh test1

    1.添加一个用户user1,每个用户的密码和用户名相同,并且添加密码完成后不显示passwd执行  结果,并显示添加成功信息。

    vi ./test1

    #!/bin/bash

    #

    #

    useradd user1

    echo "user1" | passwd --stdin user1 &>/dev/null

    echo 'add user user1 success'

    若添加其它几个用户,可以使用变量

    #!/bin/bash

    #

    #

    useradd $1

    echo "$1" | passwd --stdin $1&>/dev/null

    echo 'add user $1 success'

    2.使用一个变量保存一个变量名,删除此变量中的用户,并一并删除其家目录,显示“用户删除成功”

    #!/bin/bash

    userdel -r $1  --> -r表示目录邮件一并删除
    echo "Delete user $1 success."

    3.如果用户存在,就显示用户已存在;否则,就添加此用户;
    id user1 && echo "user1 exists." || useradd user1

    如果用户不存在,就添加;否则,显示其已经存在;
    ! id user1 && useradd user1 || echo "user1 exists."

    如果用户不存在,添加并且给密码;否则,显示其已经存在;
    ! id user1 && useradd user1 && echo "user1" || passwd --stdin user1  || echo "user1 exists."

    4.如果/etc/inittab文件的行数大于50,就显示好大的文件

    #!/bin/bash

    LINE_NUM=”wc –l /etc/inittab | cut –d’ ’   -f1”

    [$LINE_NUM –gt 50 ] && echo “big file.”  || echo “small”

    5.添加3个用户,并且设置密码和用户名相同,如果用户已经存在,显示:已存在添加完成之后计算系统一共有多个用户

    #!/bin/bash
    if ! id $1 && useradd $1 && echo "$1" | passwd --stdin $1 &>/dev/null;then
     echo "add success"
    else
     echo "$1 exists"
    fi
    COUNT=`wc -l /etc/passwd | cut -d ' ' -f1`
    echo "$COUNT users"
    6.如果其UID=0,就显示其为管理员,否则显示其为普通用户

     #!/bin/bash
    NAME=root
    USERID=`id -u $NAME`
    if [ $USERID -eq 0 ]; then
      echo "Admin"
    else
      echo "common user."
    fi

    7.判断命令历史中历史命令的总条目大于500,如果大于,则显示“Some command is done.”,否则显示:“OK”

    8.给定一个用户,获取其密码警告期限,然后判断用户密码使用期限是否已经小于警告期限,如果小于,则是显示“WARN” ,否则显示密码还有多少天到期。

    #!/bin/bash
    C_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $3}'`
    M_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $5}'`
    W_DAY=`grep ^$1 /etc/shadow | awk -F: '{print $6}'`
    N_DAY=$[`date +%s`/86400]
    U_DAY=$[$N_DAY-$C_DAY]
    L_DAY=$[$M_DAY-$U_DAY]
    if [ $L_DAY -le $W_DAY ];then
       echo "Warn."
    else
      echo "left day is $L_DAY"
    fi

    ps:date  +%s      :今天的秒数

    9.只向默认shell为bash的用户问好(判断当前系统上是否有用户的默认shell为bash)

    #!/bin/bash
    L_NUM=`wc -l /etc/passwd | cut -d' ' -f1`

    for I in `seq $L_NUM`
    do
      LINE=`head -$I /etc/passwd | tail -1`
      SHELL_U=`echo "$LINE" | cut -d: -f7`
      U_NAME=`echo "$LINE" | cut -d: -f1`
      if [ $SHELL_U == '/bin/bash' ];then
         echo "hello $U_NAME"
      fi
    done  

    也可以:

    grep "bash$" /etc/passwd &> /dev/null

        RETVAL=$?

        if [ $RETVAL -eq 0 ]; then

      echo "hello"

        fi

    10.指定一个用户名,判断此用户的用户名和它的基本组 组名是否相同

    #!/bin/bash

    if  ! id $1 &>/dev/null ; then

       echo “No such user.”

       exit 12

    fi

    if [  $1 == `id –n –g $1` ] ;then

      echo “same”

    else

      echo “different”

    fi

    11.传给脚本一个参数:目录,输出该目录中文件最大的,文件名和文件大小:

    #!/bin/bash
    #
    if [ -d $1 ];then
       L_NUM=`du -a $1 | wc -l`
       for I in `seq $L_NUM`;do
          LINE=`du -a $1 | sort -nr | head -$I | tail -1`
          F_SIZE=`echo $LINE | awk '{print $1}'`
          F_NAME=`echo $LINE | awk '{print $2}'`
          if [ -f $F_NAME ];then
             echo "The max file is $F_NAME ,filesize $F_SIZE"
             break
          fi
        done
    else
       echo "$1 is not a dir."
       exit 2
    fi

    12.查询当前192.168.1.x网段内,那些IP被使用了,输出这些IP到一个文件中

    #!/bin/bash
    #
    N=1
    for I in {2..254};do
      R=`ping -c1 192.168.1.$I | grep received | cut -d, -f2 | cut -d' ' -f2`
      if [ $R -eq 1 ];then
        echo  -e "$N   192.168.1.$I" >> /tmp/ips
        N=$[$N+1]
      fi  
    done
  • 相关阅读:
    柱状图最大的矩形
    单词搜索
    最小覆盖子串
    颜色分类
    编辑距离
    X的平方根
    二进制求和
    最大子序和
    N皇后
    java8-14-时间API
  • 原文地址:https://www.cnblogs.com/Mandylover/p/5074172.html
Copyright © 2020-2023  润新知