shell脚本编写之初级版
1. shell脚本的执行顺序是从上而下的,面向过程。
2. 文件名称格式: xxx.sh
3. 文件内容的第一行: #!/bin/bash
4. shell脚本就是将命令全部融合在一起
5. 定义变量
shell脚本的变量是以:key=value 定义的,注意:=两边不能有空格
静态变量定义:a='www.ruozedata.com'
动态变量定义:b=`date` #变量b是获取当前时间,调用b的时候动态获取当前时间
shell脚本里面使用变量的方法:${变量} ,如使用变量a就应该是${a}。
6. if判断
可以判断:整数、
小数 、字符串、
文件夹是否存在、文件是否存在 等。
格式: if [空格 xx = yy 空格] 注意:
使用单个等号,表达式前后及等号两边各有一个空格。
示例:
if [ '$a' = 'www.ruozedata.com' ]; then
echo "D3"
fi
7. shell中for循环的几个常用写法
第一类:数字性循环
例1:
#!/bin/bash
for((i=1;i<=10;i++));
do
echo $(expr $i \* 3 + 1);
done
例2:
#!/bin/bash
for i in $(seq 1 10)
do
echo $(expr $i \* 3 + 1);
done
例3:
#!/bin/bash
for i in {1..10}
do
echo $(expr $i \* 3 + 1);
done
例4:
#!/bin/bash
awk 'BEGIN{for(i=1; i<=10; i++) print i}'
第二类:字符性循环
例1:
#!/bin/bash
for i in `ls`;
do
echo $i is file name\! ;
done
例2:
#!/bin/bash
for i in $* ;
do
echo $i is input chart\! ;
done
例3:
#!/bin/bash
for i in f1 f2 f3 ;
do
echo $i is appoint ;
done
例4:
#!/bin/bash
list="rootfs usr data data2"
for i in $list;
do
echo $i is appoint ;
done
第三类:路径查找
例1:
#!/bin/bash
for file in /proc/*;
do
echo $file is file path \! ;
done
例2:
#!/bin/bash
for file in $(ls *.sh)
do
echo $file is file path \! ;
done
8. 分割
shell中字符串分割的三种方法:
例1:分割字符串’1,2,3,4,5’,以“,”分割
#!/bin/bash
var=’1,2,3,4,5’
var=${var//,/ } #这里是将var中的,替换为空格
for element in $var
do
echo $element
done
例2:分割字符串’mark:x:0:0:this is a test user:/var/mark:nologin’,以“:”分割
#!/bin/bash
user=’mark:x:0:0:this is a test user:/var/mark:nologin’
for((i=1;i<=7;i++))
do
echo $user|cut -d ":" -f$i
done
例3:针对例2写的一种通用的脚本(也使用例1)
#!/bin/bash
user=’mark:x:0:0:this is a test user:/var/mark:nologin’
i=1
while((1==1))
do
split=`echo $user|cut -d ":" -f$i`
if [ "$split" != "" ]
then
((i++))
echo $split
else
break
fi
done
9. 赋权限和执行
给shell脚本赋可执行权限: chmod +x xxx.sh
执行shell脚本的命令:./xxx.sh
sh xxx.sh
10. debug模式
在开发中,经常要是用debug模式来排查问题。
现在有两种开启debug模式的方法:
1. 在shell脚本的
#!/bin/bash 后面加上 -x: #!/bin/bash -x
#编辑
20180525.sh文件 添加 -x参数后保存退出
[hadoop@hadoop002 ~]$ vi 20180525.sh
#!/bin/bash -x
a='www.ruozedata.com'
b=`date`
echo $a
echo ${a}${b}c/d
#执行
20180525.sh 脚本
[hadoop@hadoop002 ~]$ ./20180525.sh
+ a=www.ruozedata.com
++ date
+ b='Fri May 25 14:29:54 CST 2018'
+ echo www.ruozedata.com
www.ruozedata.com
+ echo www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
www.ruozedata.comFri May 25 14:29:54 CST 2018c/d
[hadoop@hadoop002 ~]$
2. 在执行脚本的时候 带上
-x参数: sh -x test.sh
#删除
20180525.sh脚本里面的 -x参数后,执行执行 sh -x 20180525.sh 命令
[hadoop@hadoop002 ~]$ sh -x 20180525.sh
+ a=www.ruozedata.com
++ date
+ b='Fri May 25 14:30:20 CST 2018'
+ echo www.ruozedata.com
www.ruozedata.com
+ echo www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
www.ruozedata.comFri May 25 14:30:20 CST 2018c/d
[hadoop@hadoop002 ~]$