一、基础语法
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/
.
.