- 基础
1
2
3
4
5
6- shell一般以sh结尾
- 执行方式check.sh
- ./check.sh(这种方式需要有x权限)
- sh check.sh
- 第一行一般以#!/bin/bash开头
- sh执行方式不需要
debug模式
1
2
3
4sh -x check.sh
- 通过 sh -x的方式执行
- 程序中的变量参数会显示出来,我们一般用这种方式进行调试脚本变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14#!/bin/bash
WANG='hello world'
DATE=`date`
echo ${WANG}
echo ${DATE}
-----------
- 变量名一般采用大写
- 【变量的赋值左右不要有空格】
- 变量可以使用$和${}的方式引用,建议采用第二种方式四
- ''包起来的数据代表字符串,想要表示'需要转义\'
- ``包起来的数据代表命令
上面的DATE会被执行变量传递
1
2
3
4
5echo $1
echo $2
echo "个数:$#"
echo "参数作为一个长字符串:$*"
echo "PID: $$"
1 | [hadoop@hadoop data]$ ./test.sh a b |
1 | 这里可以看到可以在执行脚本后以空格分隔进行参数传递 |
- 数组
1
2
3
4
5
6
7
8
9
10
11
12arr=(dingyi zhaoer zhangsan lisi wangwu)
echo ${arr[@]}
echo ${arr[*]}
echo ${arr[4]}
echo ${#arr[@]}
[hadoop@hadoop data]$ ./test.sh
dingyi zhaoer zhangsan lisi wangwu
dingyi zhaoer zhangsan lisi wangwu
wangwu
5
1 | - 数组以空格分割的 |
- if
1
2
3
4
5
6
7
8
9
10
11
12
13[hadoop@hadoop data]$ cat test.sh
#!/bin/bash
A="abc"
B="efgh"
if [ "${a}" == "$b" ];then
echo "=="
else
echo "!="
fi
[hadoop@hadoop data]$ ./test.sh
==
1 | - [*xxx*==*xxx*] 用*标记的地方代表空格,记住一定不能少 |
循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45#!/bin/bash
j=0
for x in 1 2 3 4 5
do
echo $x
let "j++"
# let表示后面的值要进行运算
done
echo $j
echo "------------------"
for ((i=1;i<5;i++))
do
echo $i
done
echo "===================="
x=1
y=1
while(($y<5))
do
echo $y
let "y++"
let "x++"
done
echo "x: ${x}"
[hadoop@hadoop data]$ ./test.sh
1
2
3
4
5
5
------------------
1
2
3
4
====================
1
2
3
4
x: 5分割
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23S="wangwu,zhangsan,lisi,dingyi"
OLD_IFS="$IFS"
IFS=","
arr=($S)
IFS="OLD_IFS"
for x in ${arr[*]}
do
echo $x
done
[hadoop@hadoop data]$ ./test.sh
wangwu
zhangsan
lisi
dingyi
--------------
这里记住这种固定写法即可
OLD_IFS="$IFS"
IFS=","-分隔符
arr=($S)-分割结果为数组
IFS="OLD_IFS"awk命令
1
2
3
4
5基础数据
[hadoop@hadoop data]$ cat test.txt
1 2 3
4 5 6
7 8 9
1 | - 打印第一列和第二列 |
1 | -F "," |
- sed:替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44[hadoop@hadoop data]$ vi test.log
a b c
1 2 3
替换a为aa
[hadoop@hadoop data]$ sed -i 's/a/aa/' test.log
[hadoop@hadoop data]$ cat test.log
aa b c
1 2 3
将aa替换为aa'
[hadoop@hadoop data]$ sed -i "s/aa/aa'/" test.log
[hadoop@hadoop data]$ cat test.log
aa' b c
1 2 3
将aa'替换为bbb【将/换为?用是一样的】
[hadoop@hadoop data]$ sed -i "s?aa'?bbb?" test.log
[hadoop@hadoop data]$ cat test.log
bbb b c
1 2 3
全局替换 g表示全局global
[hadoop@hadoop data]$ sed -i "s/b/w/g" test.log
[hadoop@hadoop data]$ cat test.log
www w c
1 2 3
每行的行首前面加uuu
[hadoop@hadoop data]$ sed -i "s/^/uuu&/g" test.log
[hadoop@hadoop data]$ cat test.log
uuuwww w c
uuu1 2 3
每行行尾后面加uuu
[hadoop@hadoop data]$ sed -i "s/$/&uuu/g" test.log
[hadoop@hadoop data]$ cat test.log
uuuwww w cuuu
uuu1 2 3uuu