1.如何计算shell的运行时长:
starttime=$(date +%Y-%m-%d\ %H:%M:%S)
code
code
code
endtime=$(date +%Y-%m-%d\ %H:%M:%S)
echo "starttime: $starttime" >> xxx.log
echo "endtime: $endtime" >> xxx.log
start_seconds=$(date -d "$starttime" +%s);
end_seconds=$(date -d "$endtime" +%s);
# 以秒为表述形式
echo "本次运行时间: $((end_seconds-start_seconds)) s" >> xxx.log
duration=`echo $(($(date +%s -d "${endtime}") - $(date +%s -d "${starttime}"))) | awk '{t=split("60 s 60 m 24 h 999 d",a);for(n=1;n<t;n+=2){if($1==0)break;s=$1%a[n]a[n+1]s;$1=int($1/a[n])}print s}'`
#以时分秒为表述形式
echo "本次运行时间: $duration" >> xxx.log
2.if判断
if [[ -z ${var} ]]
-z 表示不存在
-n 表示存在
3.用awk去读取内容
var=$(awk -F '[:]+|[ ]+|["]' '/runpath/ {print $(NF-1)}' ${TMP_FILE_DIR})
awk [-F field-separator] 'commands' input-file(s) 其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。 在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分
要处理的文件如下:
name: "20220118_101230"
duration: 20
offset: 1755
上面的内容的意思是找到含有“runpath”的那一行,以 冒号: 、空格 、 和双引号作为分隔符,所有分割的结果会以数组的形式保存,print $(NF-1)表示我们提取出倒数第二个结果,即提取出具体的内容“20220118_101230”。
4.用sed去写数据
sed -i "s|[[:space:]]*run_path[[:space:]]*:.*| run_path: \"${var}\"|" ${TMP_FILE_DIR}
这个代码表示去写入数据,匹配到包含runpath的行,[[:space:]]*表示可以有很多空格,:.*表示冒号后面可以有很多空格。