shell :
1.什么是shell ? 脚本语言 python1.一个编程的语言2.可以执行的文件3.文件内容 linux命令组成的
1.shell语法入门
1.入门
1.文件 xxx.sh 结尾
2.第一行 #!/bin/bash
1.编写脚本
vim wc.sh2.得有执行权限【不一定】1.不给文件权限 sh xxx.sh [root@zwd05 shell]# sh ./wc.sh word count[root@zwd05 shell]# cat wc.sh #!/bin/bashecho "word count"2.给文件 执行权限[root@zwd05 shell]# chmod 744 ./wc.sh[root@zwd05 shell]# ./wc.sh word count[root@zwd05 shell]# sh ./wc.sh word count补充:1.给权限[root@zwd05 shell]# chmod u+x ./wc.sh[root@zwd05 shell]# ./wc.sh word count[root@zwd05 shell]# ~/shell/wc.sh word count[root@zwd05 shell]# sh ~/shell/wc.sh word count2. debug 1.[root@zwd05 shell]# sh -x ./wc.sh2.#!/bin/bash -xecho "word count"
2.定义变量 引用
eg:
[root@sygy10 shell]# cat variable.sh
name="zhangsan"
dt1="date"
dt2=`date`
echo $name
echo $dt1
echo $dt21.定义变量的方式:key=value注意: 1.= 前后不能有空格2.变量名一般都是大写的【标准】
2.变量的种类:shell中变量的数据类型 =》 string 1.静态k="v" k='v' k=v2.动态 k=`v` : v是变量 v系统自带的命令
3.引用 $k ${k}
任务调度:
shell =》
时间点: T+1 、h+1 20min
20220414 =》20220413
20220414 0:05
1.yarn资源
2.看你几点上班
crontab 命令 =》 定时调度
开源框架:
dophschudule 【恢复数据、重跑数据】
xxl 【shell -》 】
azkanban xx
ozzio xx
airflow 【费劲】
runduck
自己开发
3.shell脚本 参数传递 :
1.$n
$1 $2
[root@zwd05 shell]# cat parameter.sh
echo "脚本文件名: $0"
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "参数个数: $#"
echo "传递的参数作为一个字符串: $*"
echo "传递的参数作为一个字符串: $@"
echo "脚本运行时的pid :$$"补充:1.传递参数 “空格” 作为符号分割2.参数本身带有空格 要加双引号
4.数组
语法格式:
arr=(v1 v2 … vn)
1.数组用()表示
2.元素用 空格 分割
eg:
[root@zwd05 shell]# cat arr.sh
arr=(zs lisi ww zl)
echo “所有元素 : ${arr[@]}”
echo “第一个元素 : ${arr[0]}”
echo “元素个数 : ${#arr[@]}”
5.流程控制
分支
循环
1.分支 if else
语法格式:if condition;then业务代码else业务代码fi
condition => 条件判断语法
[ condition ]
结果:
非空 true
空 false
[ hadoop ]
$? => 获取上一个程序运行的结果 :1.成功 02.失败 非0的数据条件表达式:1.数值判断= 等于== 等于-lt 小于-eq 等于 -ge 大于等于-le 小于等于-gt 大于-ne 不等于2.权限判断 -r -w -x 3.文件判断 -f -e -d eg:[root@zwd05 shell]# cat if.sh name1="zs"name2="lisi"if [ ${name1} == ${name2} ];thenecho "等于"else echo "不等于"fiif elif 语法格式:if condition;then业务代码elif condition;then业务代码 else业务代码fieg:[root@zwd05 shell]# cat if_2.sh score=$1if [ ${score} -gt 90 ];thenecho "优秀"elif [ ${score} -ge 60 ];thenecho "良"else echo "不及格"fi
循环:
语法格式:
foreach:
for el in item1 item2 … itemn
do
业务代码
done
for i :语法格式 :for((i=0;i<size;i++))do 业务代码doneeg:[root@zwd05 shell]# cat for.sh for x in 1 2 3 4doecho "${x}"doneecho "-----------------"for((i=0;i<5;i++))do echo "v is ${i}"donewhile:while conditiondo 业务代码doneeg:[root@zwd05 shell]# cat while.sh i=1while ((${i}<=5))doecho "v is ${i}"let i++done总结:条件表达式 不能用 < > while for 能用 < > 不能用 -gt [] =》 条件判断() => 数值运算 =1001.2101.3001.6661.1&utm_medium=distribute.pc_-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
监控 服务器
ip hostname
linux01 linux02 linux03
df free [root@zwd05 shell]# cat split.sh
str="linu01,linu02,linux03"
arr=(${str//,/ })for linux in $arr[@]
doecho ${linux}
donestr.split(",")
shell => IFS变量 =》 字符串分割的效果
补充: linux 文本分析的 命令
awk =》 取出文本内容
sed =》 文本替换
awk :
1.获取列
[root@zwd05 shell]# cat 1.log | awk ‘{print $1}’
a
1
[root@zwd05 shell]# cat 1.log | awk ‘{print $1,$2}’
a b
1 2
2.获取行
[root@zwd05 shell]# cat 1.log | awk 'NR==1{print}'
a b c
[root@zwd05 shell]# cat 1.log | awk 'NR==2{print}'
1 2 3
[root@zwd05 shell]# cat 1.log | awk 'NR>1{print}'
1 2 3
[root@zwd05 shell]# cat 1.log | awk 'NR>=1{print}'
2.sed
文本替换
1.a 替换成 dd
[root@zwd05 shell]# cat 2.log
a a b
1 a 3
[root@zwd05 shell]# sed -i 's/a/dd/' 2.log #每行 第一次遇到 a 替换成dd
[root@zwd05 shell]# cat 2.log
dd a b
1 dd 32.全局替换
把所有的a 都替换成 dd
[root@zwd05 shell]# sed -i 's/a/dd/g' 2.log坑: [root@zwd05 shell]# sed -i 's#dd#a#g' 2.log替换文件路径:/path/a p1="/path/a"p1="/path1/a1"sed -i 's//path/a//path1/a1/g' 3.logsed -i 's#/path/a#/path1/a1#g' 3.logsql => 文件 spark-submit -f xxx.sql hive -f "sele"-e
本文发布于:2024-01-29 09:43:32,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170649261214398.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |