其他分享
首页 > 其他分享> > 一次随笔

一次随笔

作者:互联网

本周确实是忙碌的一周,上班干活,下班后写脚本,由于是业务型脚本,所以不能分享,不过其中部分报错,还有使用的语法,还是可以分享的。

一、bc
# 在shell中使用bc,需要调用bc参数,不能像终端中输入。
# 小数点后几位可以通过bc来进行定义。
[tanuki@localhost tanuki]$ echo "scale = 4; 10/3" |bc
3.3333
# 用在shell里不能直接使用这条命令,和其他命令不通。
[tanuki@localhost tanuki]$ cat boke.sh 
#!/bin/bash
read -p "输入一个数 :" e
b=22222
c=`bc<<EOF
scale=3
r=5
r/$e
EOF`
echo "$c"
# 不过还涉及一个问题bc 加上” l “参数,可以避免输出返回值。但是还是会有问题,比如“ 0.1+0.2 ”,使用bc结果输出“ .2”。
# 可以补加命令进行更改
c=`bc<<EOF
scale=3
r=5
r/$e
EOF`
echo "$c" >123.txt
ab=`cat 123.txt| awk -F  "." '{print $1}' `
if [ -z "$ab"] ;then
  sed -ri s/^/0/g  123.txt
fi
二、shell运算
[tanuki@localhost tanuki]$ cat test.sh 
#!/bin/bash
a=100
b=20
c=`expr  $a / $b `
echo "c $c"

d=100
e=10
f=`bc -l <<< $d/$e`
echo "f  $f"

g=100
h=33
echo "result $(( $g / $b))"
echo "result $(( $g / $h))"
[tanuki@localhost tanuki]$ bash test.sh 
c 5
f  10.00000000000000000000
result 5
result 3
[tanuki@localhost tanuki]$ 

# 其实还有一种$(($a/b)),之前使用bc也是因为计算结果不受控,得到的数据很不统一
三、数值比对
# 在进行数据比对的过程中,使用if判断还遇到这样的报错:
ss.sh: line 4: [[: 081212: value too great for base (error token is "081212")
 081212 dailed 
ss.sh: line 4: [[: 091212: value too great for base (error token is "091212")
# 脚本内容:并非全部执行失败,部分会有报错。
[tanuki@localhost tanuki]$ cat ss.sh 
#!/bin/bash 
for hour in `cat post.txt |cut -d "," -f2 `
do 
  if [[ "$hour" -ge 12000 ]] && [[ "$hour" -le 134000 ]] ;then
   echo " $hour success" 
  else
   echo " $hour dailed " 
  fi
done
# 需要处理的是一个csv的文件,需要切割里面的时间,修改了一下脚本,awk对数据进行切割后,成功。
四、汉字比较
[tanuki@localhost tanuki]$ cat zhongwen.sh 
#!/bin/bash 
a="tanuki(狸)
b="tanuki(狸)"
if [[ "${a}" == "${b}" ]] ;then
echo "0"
else
echo "1"
fi
[tanuki@localhost tanuki]$ bash zhongwen.sh 
0
# 第一次变量执行过程没问题,但是在大量数据比对下,就会报错,大量中文数据比对失败,将数据过滤切割导出变量后成功。
五、执行失败无报错
# 可能由于脚本太大,导致命令执行失败。
# 原本在设计脚本时,某一命令执行失败后,会产生相应的文件,后面的命令根据前面命令产生的文件,来进行判断执行情况,脚本前几行添加删除所有文件命令,但是在执行种,中间跳过了部分命令,执行后面的命令,导致执行失败。
# 当时想的办法就是,给未执行的命令加绝对路径,事实证明是可行的,但是原因没有找到,以后还会有类似的情况。
# 现在的办法是通过脚本调脚本,检测某文件内数字进行判断,类似pid的考虑。
六、处理时间段
# 时间段的处理,分成两部分:
1、状态确认,上面生成的文件格式大体这样的:
年月,日时分秒,状态,名称,task ...
202205,090521,xxok,tanuki_11,nginx升级
2、时间段时间计算,比如距离上一次过去了20分钟
[tanuki@localhost ~]$ time_duration=$(($(date +%s -d '2022-05-20') - $(date +%s -d '2020-05-29 22:03:41')));
[tanuki@localhost ~]$ echo $time_duration
62214979
# 计算结果是以秒为单位的,time/60,转成分钟。

以上,本周的收获。

标签:一次,bc,cat,echo,sh,随笔,tanuki,localhost
来源: https://www.cnblogs.com/tanukisama/p/16325352.html