shell编程快速入门及实战
shell编程:对于hadoop程序员,通常需要熟悉shell编程,因为shell可以非常方便的运行程序代码。
1、shell文件格式:xxx.sh
#!/bin/sh —shell文件第一行必须这么写
#井号后面的内容是注释
echo \’abcd\’ —-echo是输出,回显
在hadoop0:
mkdir shellfile
cd shellfile
ls
vi test.sh
#!/bin/sh
echo \’abcd\’
ls
ll
tset.sh —现在执行发现没有权限,需修改权限才能执行
chmod u+x test.sh
ll —列出文件的详细信息
test.sh —现在就能执行了,输出了abcd
vi test.sh
#!/bin/sh
i=0 —变量不需要声明,初始化不需要指定类型。变量名称只能是字母、数字、下划线组成,不能使用数字开头。
echo $i —显示变量值使用:echo $变量名
2、变量分类:临时变量和环境变量(/etc/profile:export XXX)
3、单引号、双引号、飘号的使用:
vi test.sh
#!/bin/sh
i=0
echo ${i}1234 —输出01234,要想变量独立使用的时候,用大括号独立开
vi test.sh
#!/bin/sh
i=0
echo \’$i\’ —输出$i,单引号不解析变量
echo “$i” —输出0,双引号解析变量
vi test.sh
#!/bin/sh
i=0
echo \’$i\’
echo “$i”
echo $(date) —输出时间
echo `date` —飘号是执行内容,类似于上面的$(XXX)。这里`data`==$(date)
4、位置变量:执行脚本时,传入的参数按照先后顺序使用$1、$2等顺序引用变量值
。
vi test.sh
#!/bin/sh
i=0
echo “first param:$1”
echo “second param:$2”
执行:test.sh abc 123
输出:first param:abc
second param:123
5、使用date:(更详细的查看《date命令使用文档》)
1、可以直接执行date,输出的是系统的当前时间。
2、格式化输出,date +%Y-%m-%d —%Y 年 %m 月 %d 日 中间的是分隔符-,也可以换成别人分隔符 2017-4-10
3、date +%s —格式%s表示自1970-01-01 00:00:00以来的秒数
4、date –date=‘2017-4-10’ —指定时间输出 –date=\’2009-01-01 11:11:11\’
5、指定时间输出 –date=\’3 days ago\’
6、标准输入、输出、错误:
1、标准输入、输出、错误都是命令行,使用文件描述符0、1、2引用
2、使用重定向可以把信息转换到其他位置
———
ls > a.txt —将test.sh转换到a.txt中输出了
ls 1>b.txt —将a.txt和test.sh转换到b.txt中输出了
7、使用crontab(类似于Java中的timer):
1、Linux下的定时任务
2、编辑使用crontab -e
* * * * * date>>/root/a.txt
一共六列,分别是:分 时 日 月 周 命令
(默认是按照每个小时的第一分钟输出)
要想按照每个小时的第5分钟输出,则需修改为:5 * * * * date>>/root/a.txt
要想每隔5分钟输出,则修改为:5,10,15,20,25,30 * * * * date>>/root/a.txt
3、查看使用crontab -l
8、if判断、for循环:(注意符号之间空格!每一行的结束都有一个空格!!!)
if [ … ] —if和[之间、[和条件之间、条件和]之间都有一个空格。
then
…
fi
for ((i=0;i<10;i++)) —for和(之间有个空格
do
…
done
———-
vi if.sh
#!/bin/sh
if [ \’a\’=\’a\’ ]
then
echo \’equal\’
fi
chmod u+x if.sh
if.sh —输出equal
vi for.sh
#!/bin/sh
for ((i=0;i<10;i++))
do
echo $i
done
chmod u+x for.sh
for.sh
9、自定义函数:
function 函数名(){
….
}
//最后一行语句是默认返回值
引用自定义函数文件时,使用source func.sh
——————
vi func.sh
#!/bin/sh
function dat(){
date +%Y-%m-%d
}
dat
chmod u+x func.sh
func.sh
vi func.sh
#!/bin/sh
function dat(){
date –date=”$1 days ago” +%Y-%m-%d
}
dat 2
func.sh —输出当前时间的2天前的日期
—————–
在test.sh中引用func.sh:
vi test.sh
#!/bin/sh
source func.sh —最好指定路径
dat -2
test.sh —输出2天后的日期