• 一些比较好的shellscript脚本


    1. 变量与替换

    #!/bin/bash
    
    # 变量替换
    # 另外, 变量替换还有许多别的语法
    # 例如, b=${a/23/bb} 将 23 替换成 bb 等等, 用到时再找
    a=375
    hello=$a
    
    # 注意空格
    # 如果变量中有空格, 那么变量就需要被双引号括起来
    hello="a b c    d"
    echo $hello   # 输出 a b c d
    echo ${hello} # 输出 a b c d
    echo "$hello" # 输出 a b c     d
    # -------------------------------------------------
    
    # 变量赋值
    # 变量什么时候是"裸体"的即前边没有变量符号, 当它被赋值的时候,
    #+而不是被引用的时候.
    
    a=123
    # 使用 let 赋值
    let a=16+5
    # 最好将 let 形式写为如下格式, 因为这样的格式会显示赋值语句是一个整体
    let "a=16+5"
    echo $a   # 显示结果是21
    # 如果不使用let, 直接 a=16+5, 那么echo $a 就是 16+5
    # 在 for 循环中的变量赋值
    for a in 7 8 9 10
    do
        echo -n "$a"
    done
    echo
    echo
    # 特殊的变量赋值, 把命令的结果赋值给变量
    a=`ls -l`
    echo $a
    echo "$a"
    # 与上边的 `` 含义一样
    a=$(uname -m)
    echo $a
    
    
    
    exit 0

    2. 个人推荐的测试结构 test

    #!/bin/bash
    
    # [] 单中括号
    if [ $UID -ne 0 ]
    then
        echo "This is not root."
    fi
    
    # [[]] 双中括号
    if [[ $comparison = "integer" ]]
    then
        echo "test"
    fi
    
    # 注意, 使用[[]], 而不是[], 能够阻止脚本中许多逻辑错误, 比如, 尽管在[]中将给出一个错误,
    #+但是, &&,||,<>操作还是能够工作在一个[[]]中.
        
    
    # 算数测试使用 (())
    ((0))   # 返回 1
    ((1))   # 返回 0, 这才是真
    (( 5 > 4 ))  # 返回 0, 这才是真
    
    # 比较这里有很多关键参数, 比如 -e, -eq 等, 用时再确认
    
    # 与或非 下边的等价写法
    [[ condition1 && condition2 ]]
    if [ "$exp1" -a "$exp2" ]
    fi
    
    exit 0

    3. 个人推荐的算术表达式

    #!/bin/bash
    
    n=100
    
    let "n++"  # 101
    echo $n
    ((n++))    # 102
    echo $n
    
    exit 0

    4. 清除目录下的文件

    #!/bin/bash
    
    
    # clean up version 1
    # ---------------------------------------------------------------------------------
    cd /tmp/log
    cat /dev/null > testfile
    
    echo "Log clean up."
    
    
    # clean up version 2
    # ---------------------------------------------------------------------------------
    LOG_DIR=/tmp/log
    cd $LOG_DIR
    cat /dev/null > testfile
    
    echo "Log clean up."
    
    exit
    
    
    #clean up version 3
    # ---------------------------------------------------------------------------------
    LOG_DIR=/tmp/log
    ROOT_UID=0
    LINES=10
    E_XCD=66
    E_NOTROOT=67
    
    if [ "$UID" -ne "$ROOT_UID" ]
    then
            echo "Must be root to run this script."
            exit $E_NOTROOT
    else
            echo "Yes, you are the god root."
    fi
    
    if [ -n "$1" ]
    then
            lines=$1
    else
            lines=$LINES
    fi
    
    # E_WRONGAGRS=65
    # case "$1" in
    # "") lines=50;;
    # *[!0-9]*) echo "Usage: `basename $0` file-to-cleanup"; exit $E_WRONGAGRS;;
    # *) lines=$1;;
    
    cd $LOG_DIR
    
    if [ `pwd` != "$LOG_DIR" ]
    then:
        echo "Can't change to $LOG_DIR."
        exit $E_XCD
    fi
    
    # 更有效的实现上边的内容.
    # cd /tmp/log || {
    #     echo "Cannot change to necessary directory." >&2
    #     exit $E_XCD;
    # }
    
    tail -$lines testfile > mesg.temp
    mv mesg.temp message
    
    echo "Logs cleaned up."
    
    exit 0

    5. 个人推荐的逻辑 与, 或

    #!/bin/bash
    
    # 逻辑与
    if [ condition1 ] && [ condition2 ]
    fi
    if [[ condition1 && condition2 ]]
    fi
    
    # 逻辑或
    if [ condition1 ] || [ condition2 ]
    fi
    if [[ condition1 || condition2 ]]
    fi

    6. 最大公约数

    #!/bin/bash
    
    # 最大公约数
    
    ARGS=2
    E_BADARGS=65
    
    # 参数检查
    if [ $# -ne "$ARGS" ]
    then
            echo "Usage: `basename $0` first-number second-number"
            exit $E_BADARGS
    fi
    
    gcd()
    {
        dividend=$1
        divsor=$2
    
        remainder=1
    
        until [ "$remainder" -eq 0 ]
        do
                let "remainder=$dividend%$divsor"
                dividend=$divsor
                divsor=$remainder
        done
    }
    
    # 另外, 有关函数调用
    #+上边定义了一个函数, 然后下边调用, 将参数传递进去的办法如下
    gcd $1 $2
    echo; echo "GCD of $1 and $2 = $dividend"; echo
    
    exit 0
  • 相关阅读:
    用批处理实现映射盘网络盘为固定盘符,请更改冲突的硬盘盘符
    linux下mysql寻找my.cnf顺序
    php写memcached ,c读取乱码问题[转]
    linux下boost安装方法
    解决php soap webservice 用c++ soap调用的问题[转]
    【转载】Servlet生命周期与工作原理
    【转载】深入理解Java多态性
    JSP中几个常用的参数与中文乱码问题
    获取数据库连接
    dom4j简单实例
  • 原文地址:https://www.cnblogs.com/moveofgod/p/4298779.html
Copyright © 2020-2023  润新知