linus shell 备忘数则
按客户要求校正某些数据
要点备忘
数组
array_name=(item1 item2 ... itemN)
使用时 array_name[N]
循环
用到了 for 和 while,格式分别是
for [表达式];do
done
和
while [表达式];do
done
变量类型转换 string to int
有awk之类几种方法,我用了最偷懒的。
先确保字符串变量本身没有奇怪的字符,只有阿拉伯数字(参考下文lines)
在进行逻辑运算的关键位置用 $(()) 包裹变量声明为数值
随机读取若干行
随机读10行
shuf -n 10 input_filename
脚本原文如下
#!/bin/bash
tar_val=(648 770 425 450 360 627 630 600 656 861)
sum=0
for ((i=0;i<10;i++));do
let sum+=tar_val[i]
let lognum=i+1
log="results_${lognum}.log"
lines=$(cat ${log}| wc -l)
while [ $((lines)) -lt $((tar_val[i])) ] ;do
let nline=tar_val[i]-$((lines))
if [ $((nline)) -gt 10 ];then
let nline=10
fi
#写入
shuf -n ${nline} ${log} >> ${log}
shuf -n ${nline} ${log} >> results.log
lines=$(cat ${log}| wc -l)
done
done
echo sum=$sum
unset sum i
