【数据库测试】shell脚本常用方法及命令

一、基础语法

1.变量定义

file='is ${filename}'
path="is ${filepath}"

说明
1)变量等号两边无空格
2)变量名使用花括号引起来
3)单引号内容原样输出,双引号中可以包含变量

2.判断

运算符说明举例(a=10,b=20)
-eq(==)两个数相等[ $a -eq $b ],返回false
-ne(!=)两个数不相等[ $a -ne $b ],返回true
-gt大于(greatest)
-lt小于(less)
&&逻辑AND[[ $a -lt 100 && $b -gt 100 ]],返回false
||逻辑OR[[ $a -lt 100 || $b -gt 100 ]],返回true
-z字符串长度是否为0[ -z $a ] 返回false
-n字符串长度是否不为0[ -n $a ] 返回true
$字符串为空[ $a ] 返回false
-d file检测是否为目录[ -d $file ],返回true
-f file检测是否为普通文件[ -f $file ],返回true
-e file检测文件大小是否为0[ -e $file ],返回true
-s file检测目录是否存在[ -s $file ],返回true

3.括号

单方括号 [ ]双方括号[[ ]]
条件表达式 (不能使用> <)字符串处理函数 (可以使用> <)
if [ $a == $b ]if [[ $a == $b ]]
if [ $a -gt $b ]if [[ $a > $b ]]
if [ $a == 1 ] && [ $b == 2 ]if [[ $a == 1 && $b == 2 ]]

4.调试

  • -n:读一遍脚本命令,但不执行,勇于检查脚本中的语法错误
  • -v:一边执行脚本,一边将执行过的脚本命令打印到标准输出
  • -x:执行每一条命令并且将结果依次打印出来

5.方法

1)打印切分字符串

[test@localhost ~]$ perl -E "say '*' x 50"
**************************************************

2)时间戳获取

[test@localhost ~]$ echo `(date +%Y_%m_%d_%H%M%S)`
2023_10_21_001347

3)字符串判断
判断 是否不等于字符串, x 是为了防止 {}是否不等于字符串,x是为了防止 是否不等于字符串,x是为了防止{var}为空或者未设置时,if [ 0 != "root"x ],出现语法错误。解析为 if [ x != x ],避免语法错误。

if [ "${var}"x != "root"x ]

4)退出状态码

echo $? --> if [ $? -eq 0 ] #判断上次命令是否成功,成功为0,失败为1

uname -a |grep "x86" > /dev/null
if [ $? -eq 0 ]
then
    hostType='x86'
fi

二、常用命令

1.求平均值

代码如下(示例):

[test@localhost ~]$ cat shell_test.txt |awk '{sum+=$1} END {print "average = ",sum/NR}'
average =  0.265
[test@localhost ~]$ cat shell_test.txt
0.111
0.237
0.220
0.218
0.217
0.216
0.216
0.216
0.215
0.215
0.216
0.883

2.字符串切割

代码如下(示例):

[test@localhost ~]$ grep 'update time' test1.txt |awk {'print $N3'} |cut -f2 -d ":"|sort -r
29112
26543
24213
23211
21432
21313
[test@localhost ~]$ cat test1.txt
update data_0_0
update time is:26543
update data_0_1
update time is:21313
update data_0_2
update time is:23211
update data_0_3
update time is:29112
update data_0_4
update time is:24213
update data_0_5
update time is:21432

3.ls/vi/cd等命令失效

--导出临时环境变量
[test@localhost ~]$ echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/home/test/.local/bin:/home/test/bin   #当前环境变量
1)export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
2)export PATH=/bin:/usr/bin:${PATH}

临时导出环境变量,全局生效需要将/etc/profile环境变量修改后,source /etc/profile生效

4.过滤指定字段前后几行

--过滤前一行
cat test.txt|egrep "aaa|bbb" -B1
--过滤后一行
cat test.txt|egrep "aaa|bbb" -A1
--过滤前后各一行
cat test.txt|egrep "aaa|bbb" -C1
--示例
[test@localhost ~]$ cat test2.txt
nsert into t1 values (floor(999 + random()*(2000 - 999 + 1)),floor(999 + random()*(2000 - 999 + 1)),md5(random()::text),now());
update t1 set name=md5(random()::text) where id=:id;
update data_0_0
update time is:26543
select * from t1;
insert into t1 values (floor(999 + random()*(2000 - 999 + 1)),floor(999 + random()*(2000 - 999 + 1)),md5(random()::text),now());
update t1 set name=md5(random()::text) where id=:id;
update data_0_1
update time is:21313
select * from t1;
insert into t1 values (floor(999 + random()*(2000 - 999 + 1)),floor(999 + random()*(2000 - 999 + 1)),md5(random()::text),now());
update t1 set name=md5(random()::text) where id=:id;
update data_0_2
update time is:23211
select * from t1;
[test@localhost ~]$ cat test2.txt |egrep "time" -B1
update data_0_0
update time is:26543
--
update data_0_1
update time is:21313
--
update data_0_2
update time is:23211
[test@localhost ~]$ cat test2.txt |egrep "time" -A1
update time is:26543
select * from t1;
--
update time is:21313
select * from t1;
--
update time is:23211
select * from t1;
[test@localhost ~]$ cat test2.txt |egrep "time" -C1
update data_0_0
update time is:26543
select * from t1;
--
update data_0_1
update time is:21313
select * from t1;
--
update data_0_2
update time is:23211
select * from t1;

4.监控指定目录大小

--for 循环
for ((i = 1; i < 5; i++));do du -sh jp/;sleep 5;done;
[test@localhost ~]$ for ((i = 1; i < 10; i++));do du -sh jp/;sleep 5;done;
4.3G    jp/
4.3G    jp/
4.3G    jp/
4.3G    jp/
4.3G    jp/
--while循环
[test@localhost ~]$ while true;do du -sh jp/;sleep 5;done;
4.3G    jp/
4.3G    jp/
4.3G    jp/
.
.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值