zoukankan      html  css  js  c++  java
  • shell 中的小技巧

    去掉最后一个字符

    • sed 's/.$//'

    • awk '{sub(/.$/,"")}1'

    • awk '{printf $0" "}'

    [root@ ~]# echo "387691,387710,387720,387817,387922,388067,"
    387691,387710,387720,387817,387922,388067,
    [root@ ~]# echo "387691,387710,387720,387817,387922,388067," | sed 's/.$//'
    387691,387710,387720,387817,387922,388067
    [root@ ~]# echo "387691,387710,387720,387817,387922,388067," | awk '{sub(/.$/,"")}1'
    387691,387710,387720,387817,387922,388067
    [root@ ~]# echo "387691,387710,387720,387817,387922,388067," | awk '{printf $0" 
    "}'
    

    shell脚本传参小技巧

    一般常见的脚本参数传递:./script.sh --argv1=a1 --argv2=a2 或者 ./script.sh -a1 a1 -a2 a2 ,或者两种混用

    ParseArguments() {
        while [ $# != 0 ] ; 
        do
            case "$1" in
                -argv1|-a1)
                    argv1=$2
                    shift 2
                    ;;
                --argv1=*)
                    argv1=${1#--argv1=}
                    shift
                    ;;
                -argv2|-a2)
                    argv2=$2
                    shift 2
                    ;;
                --argv2=*)
                    argv2=${1#--argv2=}
                    shift
                    ;;
                -argv3|-a3)
                    argv3=$2
                    shift 2
                    ;;
                --argv3=*)
                   argv3=${1#--argv3=}
                   shift
                   ;;
                *)
                   echo "$1 error"
                   echo $"$0: Usage: ..."
                   exit 1
                   ;;
          esac
        done
    }
    
    ParseArguments "$@"
    

    对True | False 进行判断的函数

    is_true() {
        case "$1" in
            [tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE])
                return 0
                ;;
        esac
            return 1
    }
    
    is_false() {
        case "$1" in
            [fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE])
                return 0
                ;;
        esac
            return 1
    }
    

    当is_true函数的第一个参数(后面的参数会忽略掉)为忽略大小写的t、y、yes或true时,返回状态码0,否则返回1。
    当is_false函数的第一个参数(后面的参数会忽略掉)为忽略大小写的f、n、no或false时,返回状态码0,否则返回1。

    对比两个目录的文件差异

    diff <(tree -Ci --noreport d1) <(tree -Ci --noreport d2) 
    
    diff -r d1 d2
    
    vimdiff  <(find d1 -printf "%P
    " | sort) <(find d2 -printf "%P
    " | sort)
    
    #或者远程比较:
     vimdiff  <(ssh -p 22 -o StrictHostKeyChecking=no 127.0.0.1 "find /tmp/test/t1 -printf '%P
    ' | sort" 2>/dev/null) <(find /tmp/test/t2 -printf "%P
    " | sort)
    

    vimdiff方法可以得到如下截图效果:

    一次赋值多个变量

    [root@ ]# read a b c <<< $(echo 11 22 33)
    [root@ ]# echo $a
    11
    [root@ ]# echo $b
    22
    [root@ ]# echo $c
    33
    
  • 相关阅读:
    lightoj1140_数位dp
    lightoj1057_状压dp
    lightoj1068_数位dp
    lightoj1018_状压dp
    lightoj1217_简单dp
    lightoj1119_简单状压dp
    lightoj1037_状压dp
    lightoj1110_LCS并输出
    图论算法----最短路
    poj1182 食物链
  • 原文地址:https://www.cnblogs.com/wshenjin/p/9598028.html
Copyright © 2011-2022 走看看