Shell Skills

写 shell 脚本两三技巧

Shell脚本编程30分钟入门

https://github.com/qinjx/30min_guides/blob/master/shell.md

获取脚本的所处的当前路径

1
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

解释

  • 示例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
    S0="${BASH_SOURCE[0]}"
    DIRNAME="$( dirname "$S0")"
    DIR="$( cd "$DIRNAME" && pwd)"
    echo "$S0"
    echo "$DIRNAME"
    echo "$DIR"
  • 输出:

    1
    2
    3
    ./ss.sh
    .
    /Users/hushiwei/Downloads
  • 解释:

S0是脚本相对于当前目录的路径,是相对路径

再用dirname命令得到脚本的目录名,也是相对路径

用cd命令切换到脚本所在目录,再执行pwd命令,

就得到了脚本所在目录的绝对路径

后台运行脚本,输出日志

1
2
nohup ./daily.sh > data.log 2>&1 &

给一个起始时间一个结束时间,按时间进行遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#! /bin/sh
date=`date -d "+0 day $1" +%Y%m%d`
enddate=`date -d "+1 day $2" +%Y%m%d`
echo "------------------------------"
echo "date=$date"
echo "enddate=$enddate"
echo "------------------------------"
while [[ $date < $enddate ]]
do
echo $date
date=`date -d "+1 day $date" +%Y%m%d`
done
执行: ./dotime.sh 20170101 20170130

文本统计查询

1
2
3
4
5
6
7
wordcount--以\001分隔,取第一个字段进行统计
cat merge | awk -F '\\\001' '{print $1}' | sort | uniq -c >merge_imei_num.log
cat merge_imei_num.log | sort -r | more
按照文件里面的每一行的长度进行排序,并且打印出第一个字段
cat merge | awk -F '\\\001' '{print length($0)" "$1}' | sort -nr >sortmerge.log
`
Donate comment here