Shell Skills

2017/3/12 posted in  Shell

写 shell 脚本两三技巧

Shell脚本编程30分钟入门

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

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

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

解释

  • 示例: ``` #DIR="\(( cd "\)( dirname "${BASH_SOURCE[0]}" )" && pwd )"

S0="${BASH_SOURCE[0]}"

DIRNAME="\(( dirname "\)S0")"

DIR="\(( cd "\)DIRNAME" && pwd)"

echo "$S0"

echo "$DIRNAME"

echo "$DIR"

+ 输出:

./ss.sh
.
/Users/hushiwei/Downloads

+ 解释:

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

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

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

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

# 后台运行脚本,输出日志

```$xslt

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

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

#! /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

文本统计查询

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
````