zoukankan      html  css  js  c++  java
  • Linux——shell简单学习(二)

    流控制语句:

      for…done语句

      格式:for  变量   in   名字表

         do

           命令列表

         done

      例子:

      

    #!/bin/sh
    
    for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday
    do
    echo "The day is : $DAY"
    done
    

      

    select  变量 in 关键字

    do

      command 1

      ... ...

      command n

    done

    select把关键字中的每一项做成类似表单,以交互的

    方式执行do和done之间的命令。

    case…esac语句,格式:

      case  变量   in

      字符串1)    命令列表1

      ;;

      ...

      字符串n)    命令列表n

      ;;

      esac

    while语句,格式:

      while  条件

      do

        命令

      done

    #! /bin/sh
    
    num=1
    
    while [ $num -le 10 ]
    
    do
    
    SUM=`expr $num * $num`
    
    echo $SUM
    
    num=`expr $num + 1`
    
    done
    

      

    until语句,格式:

      until  条件

      do

        命令

      done

    until类似while循环,不同的是until是条件返回值为假时才继续执行。

    break:跳出整个循环

    continue:跳过本次循环,进行下次循环

    shift指令:参数左移,每执行一次,参数序列顺次左移一个位置,$#的值减1,用于分别处理每个参数,移出去的参数不再可用

    #! /bin/sh
    
    if  [ $# -le 0 ]
    then
    
    echo "Not enough parameters"
    exit 0
    
    fi
    
    sum=0
    
    while [ $# -gt 0 ]
    do
    
    	sum=`expr $sum + $1`
    	shift
    done
    
    echo $sum
    

      

    函数的定义:

      

    函数名 ()

    {

      命令序列

    }

    函数的调用:不带()

    函数名   参数1    参数2 …

    函数中的变量:

      变量均为全局变量,没有局部变量

      函数中的参数:调用函数时,可以传递参数,在函数中用$1、$2…来引用

    sh -x script这将执行该脚本并显示所有变量的值。

    sh -n script不执行脚本只是检查语法的模式,将返回所有语法错误。

     

    awk命令应用:

      awk -F 域分隔符 ‘命令’

       示例:

      1、检测系统中UID为0的用户:awk -F: '$3==0 {print $1}' /etc/passwd   F后边的符号表示分割符,默认为空格

      2、检测系统中密码为空的用户:awk -F: 'length($2)==0 {print $1}' /etc/shadow

      

    输入文件名,然后进行压缩备份:

    1 #!/bin/sh
          2 #back files by date
          3
          4 DATE=`/bin/date +%Y%m%d`
          5 /bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log
          6 /bin/gzip /backup/$1.$DATE.tar
          7
          8 if [ $? -eq 0 ]
          9 then
         10         echo "$1 $DATE backup successfully "
         11 else
         12         echo "ERROR failture $1 $DATE backup"
         13 fi
    

      

    查看apache 服务是否启动如果没有启动则启动,否则输出已启动

     #!/bin/sh
          2
          3 echo "now .the web services of this Linux System will be fetect.."
          4 echo
          5
          6 web=`/usr/bin/pgrep httpd`
          7 if [ "$web" != "" ]
          8 then
          9         echo " the web services is running"
         10 else
         11         echo "the web services is not runing"
         12         /etc/rc.d/init.d/httpd start
         13 fi
    

      

    查看任意输入用户的信息:

     

     #!/bin/sh
          2
          3 echo "input your name"
          4 read username
          5 /bin/grep $username /etc/passwd > /dev/null 2> /dev/null  #查看用户是否存在
          6
          7 if [ $? -eq 0 ]
          8 then
          9         echo "username is : $username"
         10 else
         11         echo "user does not exit"   #不存在就退出结束程序
         12         exit 1
         13 fi
         14 echo
         15
         16 userinfo=`/bin/grep ^$username:x /etc/passwd `     #得到用户的信息
         17 userid=`/bin/echo $userinfo | /bin/awk -F: '{print $3}'` #取出uid
         18 groupid=`/bin/echo $userinfo | /bin/awk -F: '{print $4}'` #取出gid
         19 homedir=`/bin/echo $userinfo | /bin/awk -F: '{print $6}'` #取出宿主目录
         20 shell=`/bin/echo $userinfo | /bin/awk -F: '{print $7}'`  #取出执行脚本
         21
         22 echo "用户基本信息为:" 
         23 echo "userinfo $userinfo"
         24 echo "userid $userid"
         25 echo "groupid $groupid"
         26 echo "homedir $homedir"
         27 echo "shell $shell"
         28
         29 grouptmpname=`cat /etc/group | /bin/grep :x$groupid`    #取得所在组的名字
         30 groupname=`echo $grouptmpname | /bin/awk -F : '{print $1}'`
         31
         32 echo "用户所在组为 : $groupname"
         33 echo
         34
         35 #get group info
         36 groups=`/usr/bin/groups $username`
         37 echo $groups
         38 echo
         39
         40 #get login info
         41 userlogin=`/usr/bin/who | /bin/grep $username`   #判断用户是否登录
         42 if [ "$userlogin" != "" ]
            then
         45         echo "$username 没有登录"
         46 else
         47         echo "$username 以及登录"
         48 fi
         49
    
        
    

      

    输入用户名,从登录列表中剔除

     #!/bin/sh
          2
          3 #找出于该用户有关的服务
          4 username=$1
          5 /bin/ps aux | /bin/grep jack | awk '{print $2}' > /tmp/killuser.log
          6
          7 #关闭与该用户有关的服务
          8 killids=`cat /tmp/killuser.log`
          9 for pid in $killids
         10 do
         11         /bin/kill -9 $pid
         12 done
    

      

    批量添加用户:

          1 #!/bin/sh
          2
          3 echo "input user name"
          4 read name
          5 echo "input adduse numbers"
          6 read num
          7
          8 #循环控制添加用户
          9 i=0
         10 while [ $i -le $num ]
         11 do
         12         /usr/sbin/useradd $name$i
         13         i=`expr $i + 1`
         14 done
         15
         16
         17 echo "input password "
         18 read password
         19 j=0;
         20 while [ $j -le $num ]
         21 do
         22         echo $password | /usr/bin/passwd --stdin $name$j
         23         j=`expr $j + 1`
         24 done
    

     批量删除用户:

          1 #!/bin/sh
          2
          3 echo "input del username"
          4 read name
          5 echo "input del number"
          6 read num
          7
          8 i=0
          9 while [ $i -le $num ]
         10 do
         11         /usr/sbin/userdel -r $name$i
         12         i=`expr $i + 1`
         13 done
    

      

  • 相关阅读:
    luogu P1451 求细胞数量
    P1443 马的遍历
    luogu P1194 买礼物
    codevs 4919 线段树练习4
    printf的实型
    printf的整型
    scanf
    printf
    c++常用函数
    字符类型C++(ascll码表)
  • 原文地址:https://www.cnblogs.com/E-star/p/3416220.html
Copyright © 2011-2022 走看看