Shell
1.shell是什么
2.语法
1.文件命名
2.编写脚本
3.运行脚本
4.定义变量与引用
5.数组
6.流程控制
1.分支 if
2.循环 for while
7.分割字符串
1.str
2.IFS变量分割
8.文本分析工具
1.awk
2.sed
1.shell是什么
1.普通文件
2.linux命令组成
3.编译语言
2.语法
1.文件命名
1.文件命名结尾一般以 .sh 结尾
2.文件内容 第一行 #!/bin/bash (以#!/bin/bash 进行解析)
2.编写脚本
worldcount 词频统计
[hadoop@bigdata13 test]$ cat 1.sh
#!/bin/bash
echo “helloworld”
3.运行脚本 sh
1.[hadoop@bigdata13 test]$ sh 1.sh
helloworld
2.给脚本赋予权限
文件颜色变绿
可以之间执行 ./1.sh
[hadoop@bigdata13 test]$ chmod 744 1.sh
[hadoop@bigdata13 test]$ ll
-rwxr--r--. 1 hadoop hadoop 30 12月 14 16:35 1.sh
3.补充:
debug
1.#!/bin/bash -x
2.sh -x 1.sh
4.定义变量与引用
1.变量的命名规范
1.命名只能使用英文字母、数字、下划线,不能以数字开头
2.中间不能有空格,可以使用下划线
3.不能使用linux里的关键字
2.定义变量
key=value
注意:
1. = 前后不能有空格
3.引用
[hadoop@bigdata13 test]$ cat 1.sh
#!/bin/bash
name="zs"
dt="date"
echo ${name}
echo ${dt}
[hadoop@bigdata13 test]$ ./1.sh
zs
date
name="zs" 静态变量
dt1=·data 动态变量
引用:$k
${k}
4.传递参数
脚本内获取脚本外参数: 格式$n
1.n=1 第一个参数...
2.n=0 获取脚本名字
3.n=# 获取参数的个数
4.n=* 将参数作为以个字符串
5.n=$ 脚本的pid
5.数组
语法格式:
1.元素用空格分隔
2.arr=(value1 value2 value3...)
2.格式 ${arr[n]}
1.所有数组元素 ${arr[*]}
2.第二个元素 ${arr[1]}
3.数组多少个元素 ${#arr[*]}
6.流程控制
1.分支
1.if else语法
语法结构
if condition then
command
elif
command
else
command
fi
2.condition 条件判断
[ 表达式 ] 表达式前后都要有空格
1.值判断
= 等于
== 等于
-ne 不等于
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于
2.权限判断
3.文件类型判断
3. $? 获取上一个命令是否执行成功
成功 0 true
不成功 非0 false
2.循环
1.for
语法格式
1.for x in item1 item2 ...
do
commond
done
2.for ((i=0;i<=10;i++))
do
commond
done
2.while
语法格式
while condition
do
todo
done
例:i=1
while [ i<=10 ]
do
echo "${i}"
let i++
done
7.分割字符串
1.
str//,/ 把,号变成空格
例:
str="zs,ls,wu"
arr=(${str//,/})
2.IFS变量分割
data="chenyu, chencaifeng, chenzixuan, chenzixi"
oldIFS=$IFS
IFS=", "
for item in $data;
do
echo Item:$item
done
8.文本分析工具
1.awk 文本分析
1.获取第一列和第二列数据
cat 1.log|awk '{pink $1 $2}'
2.获取行数据
cat 2.log|awk 'NR=1{pink}'
2.sed 文本替换
1.把a换成d
sed -i 's#a#d#g' 1.log 有g为全局替换
无则为每行第一个替换