shell脚本

文件内容第一行#!/bin/bash 文件结尾一般以.sh结尾

运行shell脚本

sh ./1.sh

[root@bigdata12 shell]# sh ./1.sh
www.bigdata.com

相对路劲./1.sh 绝对路径/root/shell/1.sh

www.bigdata.com

[root@bigdata12 shell]# chmod u+x 1.sh
[root@bigdata12 shell]# ./1.sh
www.bigdata.com
[root@bigdata12 shell]# /root/shell/1.sh
www.bigdata.com

debug

#!/bin/bash -x

#!/bin/bash -x
echo "www.bigdata.com"
[root@bigdata12 shell]# ./1.sh
+ echo www.bigdata.com
www.bigdata.com

sh -x 1.sh

[root@bigdata12 shell]# sh -x 1.sh
+ echo www.bigdata.com
www.bigdata.com

变量命名规范

1.命名只能使用英文字母、数字、和下划线、不能以数字开头
2.中间不能有空格、可以使用下划线
3.不能使用Linux里面的关键字

定义变量

1.=前后不能有空格
静态变量:
k=v k=“v” k=‘v’
动态变量
k=v
引用: $k ${k}(推荐使用)可以在后面拼接字符串

[root@bigdata12 shell]# vim 2.sh
[root@bigdata12 shell]# chmod u+x 2.sh
[root@bigdata12 shell]# cat 2.sh
name="tom"
dt='date1'
dt1=1
dt2=`date`
echo ${name}
echo ${dt}
echo ${dt1}
echo ${dt2}
[root@bigdata12 shell]# ./2.sh
tom
date1
1
20221102日 星期三 19:21:35 CST

传递参数

[root@bigdata12 shell]# vim 3.sh
[root@bigdata12 shell]# cat 3.sh
echo "文件名:$0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数个数:$#"
echo "传递的参数作为一个字符串:$*"
echo "此脚本运行时的pid:$$"
[root@bigdata12 shell]# chmod u+x 3.sh
[root@bigdata12 shell]# ./3.sh "hello" "world"
文件名:./3.sh
第一个参数:hello
第二个参数:world
参数个数:2
传递的参数作为一个字符串:hello world
此脚本运行时的pid:3085

数组

1.元素以空格进行分割
2.arr=(value1 value2 value3…)

[root@bigdata12 shell]# vim 4.sh
[root@bigdata12 shell]# chmod u+x 4.sh
[root@bigdata12 shell]# cat 4.sh
arr=(zs lisi zl wrm)
echo "所有数组元素:${arr[*]}"
echo "第二个元素:${arr[1]}"
echo "数组元素个数:${#arr[*]}"
[root@bigdata12 shell]# ./4.sh
所有数组元素:zs lisi zl wrm
第二个元素:lisi
数组元素个数:4

流程控制

1.if else 语法

1.[] 前后要有空格
2.关系表达式 前后要有空格
条件判断: = 等于 ==等于 <= >= > < != -eq 等于 -ne 不等于
-lt 小于 -gt 大于 -le 小于等于 -ge 大于等于
linux 获取上一个命令是否执行成功:$?
成功 0 true 不成功 非0 false
2.权限判断:
-r
-w
-x
3.文件类型判断
-d 文件夹
-f 文件
-e 是否是文件

[root@bigdata12 shell]# vim 5.sh
[root@bigdata12 shell]# chmod u+x 5.sh
[root@bigdata12 shell]# cat 5.sh
a="zs"
b="zh"
if [ ${a} == ${b} ];then
        echo "ab相等"
else
        echo "ab不等"
fi
[root@bigdata12 shell]# ./5.sh
ab不等

if elseif语法

判断多个条件时: && ||

[root@bigdata12 shell]# vim 6.sh
[root@bigdata12 shell]# chmod u+x 6.sh
[root@bigdata12 shell]# cat 6.sh
score=$1
if [ ${score} -ge 90 ];then
        echo "优"
elif [ ${score} -ge 60 ];then
        echo "良"
else 
        echo "差"
fi
[root@bigdata12 shell]# ./6.sh 88

for语法

[root@bigdata12 shell]# vim 7.sh
[root@bigdata12 shell]# chmod u+x 7.sh
[root@bigdata12 shell]# cat 7.sh
for x in 1 2 3 4
do
    echo ${x}
done
[root@bigdata12 shell]# ./7.sh
1
2
3
4

fori语法

[root@bigdata12 shell]# vim 8.sh
[root@bigdata12 shell]# chmod u+x 8.sh
[root@bigdata12 shell]# cat 8.sh
for((i=0;i<10;i++))
do
    echo "value is ${i}"
done
[root@bigdata12 shell]# ./8.sh
value is 0
value is 1
value is 2
value is 3
value is 4
value is 5
value is 6
value is 7
value is 8
value is 9

while语法

[root@bigdata12 shell]# vim 9.sh
[root@bigdata12 shell]# chmod u+x 9.sh
[root@bigdata12 shell]# cat 9.sh
i=1
while((i<=10))
do
    echo ${i}
    let i++
done
[root@bigdata12 shell]# ./9.sh
1
2
3
4
5
6
7
8
9
10

直接 ping 无限次 1秒一次:ping 192.168.0.1
指定 ping 6次就结束 1秒一次:ping -c6 192.168.0.1
指定 ping 2次就结束 2秒一次:ping -c2 -i2 192.168.0.1
指定 ping 超时时间:ping -W0.1 192.168.0.1
0:表示标准输入流
1:表示标准输出
2:表示标准错误输出
2>&1:表示标准错误输出重定向等同于标准输出
/dev/null(黑洞) 2>&1 这条命令的意思就是在后台执行这个程序,并将错误输出2重定向到标准输出1,然后将标准输出1全部放到/dev/null文件,也就是清空
读取命令前,有提示消息:read -p
case “变量值” in
值1)
指令 …
;;
值2)
指令…
;;
*)
指令 …
;;
esac

字符串替换: str//,/

[root@bigdata12 shell]# vim 10.sh
[root@bigdata12 shell]# chmod u+x 10.sh
[root@bigdata12 shell]# cat 10.sh
str="zhangsan,lisi,zhaoliu"
arr=(${str//,/ })
for var in ${arr[*]}
do
    echo $var
done
[root@bigdata12 shell]# ./10.sh
zhangsan
lisi
zhaoliu

shell里面常用的分析工具

awk 文本分析

获取列数据

[root@bigdata12 shell]# vim 11.sh
[root@bigdata12 shell]# chmod u+x 11.sh
[root@bigdata12 shell]# cat 11.sh
a b c
1 2 3
4 5 6
[root@bigdata12 shell]# rm -rf 11.sh
[root@bigdata12 shell]# vim 1.log
[root@bigdata12 shell]# cat 1.log | awk '{print $1}'
a
1
4
[root@bigdata12 shell]# cat 1.log | awk '{print $2}'
b
2
5
[root@bigdata12 shell]# cat 1.log | awk '{print $1,$2}'
a b
1 2
4 5

获取行数据

[root@bigdata12 shell]# cat 1.log | awk 'NR==1{print}'
a b c
[root@bigdata12 shell]# cat 1.log | awk 'NR>1{print}'
1 2 3
4 5 6

sed

sed -i ‘s/a/d/’ 1.log

文本中a 替换成d,只能替换每行第一次遇到的

[root@bigdata12 shell]# cat 1.log
a b c
1 2 3
a 5 a
[root@bigdata12 shell]# sed -i 's/a/d/' 1.log
[root@bigdata12 shell]# cat 1.log
d b c
1 2 3
d 5 a

sed -i ‘s/a/d/g’ test.log全文替换

[root@bigdata12 shell]# cat 1.log
a b c
1 2 3
a 5 a
[root@bigdata12 shell]# sed -i 's/a/d/g' 1.log
[root@bigdata12 shell]# cat 1.log
d b c
1 2 3
d 5 d

需求: p2 值路径 替换成 /root

[root@bigdata12 shell]# cat 1.log
p1=/data/log
p2=/data/spark
[root@bigdata12 shell]# sed -i 's/\/data\/spark/\/root/g' 1.log
[root@bigdata12 shell]# cat 1.log
p1=/data/log
p2=/root
或
[root@bigdata12 shell]# sed -i 's#/data/spark#/root#g' 1.log
[root@bigdata12 shell]# cat 1.log
p1=/data/log
p2=/root
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值