zoukankan      html  css  js  c++  java
  • Shell编程入门(第二版)(中)

    变量測试语句-test

    作用:用来測试变量是否相等,是否为空,文件类型等。

    格式:

    test 測试条件 或 [] #范围:整数,字符串。文件  

    1)整数測试

    test int1 -eq int2  測试整数是否相等 

    test int1 -ge int2  測试int1是否>=int2 

    test int1 -gt int2  測试int1是否>int2 

    test int1 -le  int2 測试int1是否<=int2 

    test int1 -lt int2  測试int1是否<int2 

    test int1 -ne int2  測试整数是否不相等

    2)字符串測试

    test str1=str2  測试字符串是否相等 

    test str1!=str2  測试字符串是否不相等 

    test str1  測试字符串是否不为空 

    test -n str1  測试字符串是否不为空 

    test -z str1  測试字符串是否为空

    3)文件測试

    test -d file  指定文件是否文件夹 

    test -f file  指定文件是否常规文件 

    test -x file  指定文件是否可运行 

    test -r file  指定文件是否可读 

    test -w file  指定文件是否可写 

    test -a file 指定文件是否存在 

    test -s file 文件的大小是否非0

     

    注:test測试语句一般不单独使用,一般作为if语句的測试条件,;

    if test -d file
    then
    	....
    fi


    test的变量的简写形式”[]”

    演示样例-apachtest.sh

    #!/bin/bash
    # A test shell script for test Apache is running or not
    
    web=$(/usr/bin/pgrep httpd)
    
    echo "Now let's test the Apache..."
    echo
    
    #if [ "$web" != "" ]
    if [ -n "$web" ]
    then
        echo "Apache is running..."
    else
        echo "Apache is NOT running..."
        /etc/rc.d/init.d/httpd start
    fi

    流程控制语句

    流控制语句:用于控制shell程序的流程 

    exit语句:退出程序运行,并返回一个返回码,返回码为0表示正常退出,0表示非正常退出。

     

    比如:exit 0 

    一、if

    if/then格式

    if test -d $1 
    then 
    		... 
    fi 

    演示样例-if_then.sh

    #!/bin/bash
    # A test shell script for if/then
    
    if [ -x /etc/rc.d/init.d/httpd ]
    then
        echo "Script: /etc/rc.d/init.d/httdp have x power!"
        /etc/rc.d/init.d/httpd restart
    fi

    if/else格式

    	if 条件1 
    	then 
    		命令1 
    	elif 条件2
    	then 
    		命令2 
    	else 
    		命令3 
    	fi 

    多个条件的联合

    -a: 逻辑与,仅当两个条件都成立时,结果为真。 

    -o: 逻辑或,两个条件仅仅要有一个成立,结果为真。

    演示样例-if_else.sh

    #!/bin/bash
    # A test shell script for if/elif/else
    
    echo -n "Please input a filename: "
    read filename
    
    if [ -d $filename ]
    then
        echo "$filename is a directory"
    elif [ -f $filename ]
    then
        echo "$filename is a commen file"
    elif [ -c $filename -o -b $filename ]
    then
        echo "$filename is a device file"
    else
        echo "$filename is a unkown file"
    fi

    演示样例-if_elif_exit.sh

    #!/bin/bash
    # A test shell script for if/elif
    
    if [ $# -ne 2 ] 
    then
    echo "Not enough parameters"
    exit 1
    fi
    
    if [ $1 -gt $2 ]
    then
        echo "$1 is great then $2"
    elif [ $1 -lt $2 ]
    then
        echo "$1 is little then $2"
    else
        echo "$1 is equal as $2"
    fi

    二、for/in

    for 变量 in 名字表 
    do 
    	命令列表 
    done 

    演示样例-for.sh

    #!/bin/bash
    # A test shell script for "for"
    
    for DAY in Sunday Monday Tuesday Wednesday Thursday Friday Saturday
    do
        echo "The day is $DAY"
    done


    awk命令[分段提取]

    awk -F域分隔符 命令[单引號] #假设不用-F指定切割符,默觉得空格

    1、检測系统中UID0的用户 

    awk -F: '$3==0 {print $1}' /etc/passwd

    #awk -F: '{print $1}' /etc/passwd

    -F 指定切割附为:

    $3 表示以:为切割附的第三位

    2、检測系统中password为空的用户 

    awk -F: 'length($2)==0 {print $1}' /etc/shadow 

    #ps aux | grep -v root | awk '{print $2}'

    演示样例-awk.sh

    #!/bin/bash
    # A test script for desplay users infomation
    
    /bin/echo -n "Please input a username: "
    read username
    
    /bin/grep $username /etc/passwd > /dev/null 2> /dev/null
    
    if [ $? -eq 0 ]
    then
        /bin/echo "username is: $username"
    else
        /bin/echo "user: $username is not exits."
        exit 1
    fi
    /bin/echo
    
    # list /etc/passwd info
    userinfo=`/bin/grep ^$username:x /etc/passwd`
    uid=`echo $userinfo | awk -F: '{print $3}'`
    gid=`echo $userinfo | awk -F: '{print $4'}`
    dir=`echo $userinfo | awk -F: '{print $6}'`
    shell=`echo $userinfo | awk -F: '{print $7}'`
    
    # get /etc/group info
    groupinfo=`/bin/grep x:$gid /etc/group`
    gname=`/bin/echo $groupinfo | awk -F: '{print $1}'`
    
    /bin/echo "user id is: $uid"
    /bin/echo "default group is: $gname"
    /bin/echo "home directory is: $dir"
    /bin/echo "shell is: $shell"
    /bin/echo "group member info:"
    
    # get group members
    groups=`/usr/bin/groups $username`
    /bin/echo $groups
    /bin/echo
    
    # get online info
    online=`/usr/bin/who | grep $username`
    if [ -z "$online" ]
    then
        echo "$username is not online"
    else
        echo "$username is online..."
    fi

    实例-killuser.sh

    #思路:将一个用户全部的进程包含shell都关闭,则相当于将该用户踢出了系统
    #!/bin/bash
    # A shell sript to kill a user in Linux
    
    username=$1
    
    killpid=`/bin/ps aux | grep $username | awk '{print $2}'`
    
    for PID in $killpid
    do
        /bin/kill -9 $PID 2> /dev/null
    done

  • 相关阅读:
    51nod 1113 矩阵快速幂 如题目
    poj Raising Modulo Numbers 快速幂模板(取膜)
    bzoj 1503: [NOI2004]郁闷的出纳员 平衡树
    codevs 1063 合并果子 优先队列相关
    bzoj 3224: Tyvj 1728 普通平衡树 Treap模版
    快排模板
    hdu 4353 统计点在三角形内的个数
    hdu 3264 圆的交+二分
    hdu 3685 多边形重心+凸包
    hdu 3992 AC自动机上的高斯消元求期望
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/5078808.html
Copyright © 2011-2022 走看看