hadoop(二10)——shell的简便编写

一、轻松的千家万户菜单

[root@web129 ~]# cat menu.sh 
#!/bin/bash
#shell菜单演示
function menu()
{
echo -e `date`
cat <<EOF
-----------------------------------
>>>菜单主页:
`echo -e "\033[35m 1)系统状态\033[0m"`
`echo -e "\033[35m 2)服务管理\033[0m"`
`echo -e "\033[35m 3)主菜单\033[0m"`
`echo -e "\033[35m Q)退出\033[0m"`
EOF
read -p "请输入对应序列号:" num1
case $num1 in
    1)
    echo -e "\033[32m >>>系统状态-> \033[0m"
    system_menu
    ;;
    2)
    echo -e "\033[32m >>>服务管理-> \033[0m"
    server_menu
    ;;
    3)
    echo -e "\033[32m >>>返回主菜单-> \033[0m"
    menu
    ;;
    Q|q)
    echo -e "\033[32m--------退出--------- \033[0m"
    exit 0
    ;;
    *)
    echo -e "\033[31m err:请输入正确的编号\033[0m"
    menu
esac
}
function system_menu()
{
cat<<EOF
------------------------
********系统状态********
------------------------
1)nginx 状态
2)http 状态
3)tomcat 状态
X)返回上一级目录
------------------------
EOF
read -p "请输入编号:" num2
case $num2 in
    1)
    `echo -e "systemctl status nginx.service"`
    system_menu
    ;;
    2)
     `echo -e "systemctl status httpd.service"`
    system_menu
    ;;
    3)
     `echo -e "systemctl status tomcat.service"`
    system_menu
    ;;
    x|X)
    echo -e "\033[32m---------返回上一级目录------->\033[0m"
    menu
    ;;
    *)
    echo -e "请输入正确编号"
    system_menu
esac
}
function server_menu()
{
cat<<EOF
------------------------
1)开启服务
2)停止服务
X)返回上一级目录
------------------------
EOF
read -p "请输入编号:" num3
case $num3 in
        1)
        op_menu
        ;;
        2)
        op_menu1
        ;;
        x|X)
        echo -e "\033[32m-- -----返回上一级目录---------> \033[0m"
        menu
        ;;
        *)
        echo -e "请输入正确编号"
        system_menu
esac
}

function op_menu()
{
cat<<EOF
------------------------
1)开启nginx服务
2)开启http服务
3)开启tomcat服务
X)返回上一级目录
------------------------
EOF
read -p "请输入编号:" num4
case $num4 in
        1)
    `echo -e "systemctl start nginx.service"`
    op_menu
        ;;
        2)
    `echo -e "systemctl start httpd.service"`
        op_menu
    ;;
    3)
    `echo -e "systemctl start tomcat.service"`
        op_menu
        ;;
        x|X)
        echo -e "\033[32m--------返回上一级目录------->\033[0m"
        server_menu
        ;;
        *)
        echo -e "请输入正确编号"
    op_menu
esac
}
function op_menu1()
{
cat<<EOF
------------------------
1)停止nginx服务
2)停止http服务
3)停止tomcat服务
X)返回上一级目录
------------------------
EOF
read -p "请输入编号:" num5
case $num5 in
        1)
        `echo -e "systemctl stop nginx.service"`
        op_menu1
        ;;
        2)
        `echo -e "systemctl stop httpd.service"`
        op_menu1
        ;;
        3)
        `echo -e "systemctl stop tomcat.service"`
        op_menu1
        ;;
        x|X)
        `echo -e "\033[32m >>>返回上一级目录---> \033[0m"`
        server_menu
        ;;
        *)
        echo -e "请输入正确编号"
        op_menu1
esac
}
menu
[root@web129 ~]# 

 

展现效果如下:

图片 1

图片 2

 

上节课大家一块读书了Sqoop(数据迁移工具),那节课大家一起容易学习一下Shell脚本。

 首先我们来新建一个test.sh文件,并在文件内输入一句用来输出的语句,如下所示。

[root@itcast03 ~]# vim
test.sh
echo ‘123’

封存上边的剧情,大家试着推行一下test.sh,发现会报如下所示的晋升,说没有权力实行。

[root@itcast03 ~]#
./test.sh
-bash: ./test.sh: Permission denied
[root@itcast03 ~]#

因为大家是在root用户下,大家能够利用sh
test.sh来强制实践,如下所示,发现执行成功了。

[root@itcast03 ~]# sh
test.sh
123
[root@itcast03 ~]#
大家也得以追加对当前目录下的test.sh文件的持有者增添可试行权限,然后再施行test.sh,如下所示,发现实施成功。(我们来讲一下chmod
u+x test.sh这句话的乐趣,chmod是权力管理命令change the permissions mode
of a file的缩写。u代表全体者,x代表施行权限。 + 代表增添权限。chmod u+x
test.sh就代表对当前目录下的test.sh文件的持有者扩展可施行权限)

[root@itcast03 ~]# chmod u+x
test.sh
[root@itcast03 ~]#
./test.sh
123
[root@itcast03 ~]#

随之大家再定义八个变量并打字与印刷出那么些变量的值,大家先注释掉echo
‘1二三’,在文书中注释的话,在前边加”#”就能够。并新增添赤褐字体的内容,如下所示。

[root@itcast03 ~]# vim
test.sh
直白打字与印刷1贰三
echo ‘123’
概念变量并打字与印刷输出变量的值
STR=”HELLO WORLD”
echo “$STR”
封存退出后test.sh文件之后,我们来实施一下该脚本。发现真正打字与印刷出了我们定义的变量STQashqai的值。
[root@itcast03 ~]#
./test.sh
HELLO WORLD
[root@itcast03 ~]#

假设大家想要看下那几个变量打印的实行进度,大家得以在本子中增多一句”set
-x”,如下所示。
set -x

概念变量并打字与印刷输出变量的值

STR=”HELLO WORLD”
echo “$STR”
大家再来推行一下test.sh这些剧本,会发觉多了上面卡其灰字体的两行内容,那两行内容正是经过音信,显示了为何会打字与印刷出那些结果。
[root@itcast03 ~]#
./test.sh
++ STR=’HELLO WORLD’
++ echo ‘HELLO WORLD’
HELLO WORLD
[root@itcast03 ~]#
接着我们用该脚本来试行一下我们越发wordcount,当然,前提是我们的HDFS系统根目录下已经有wc.txt文件了,wc.txt文件的始末如下图所示。

图片 3

image

然后大家在test.sh文件中输入如下森林绿字体的内容并保留退出。

[root@itcast03 ~]# vim
test.sh
直白打字与印刷1二三
echo ‘123’

set -x
概念变量并打字与印刷输出变量的值
STR=”HELLO WORLD”
echo “$STR”

hadoop jar
/itcast/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
wordcount /wc.txt /wcout

大家举行test.sh脚本,如下所示,由于消息太多,小编只截取了①有个别。

[root@itcast03 ~]#
./test.sh
++ hadoop jar
/itcast/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
wordcount /wc.txt /wcout
16/10/29 23:20:19 INFO client.RMProxy: Connecting to ResourceManager at
itcast03/169.254.254.30:8032
16/10/29 23:20:19 INFO input.FileInputFormat: Total input paths to
process : 1
16/10/29 23:20:26 INFO mapreduce.Job: map 0% reduce 0%
16/10/29 23:20:32 INFO mapreduce.Job: map 100% reduce 0%
16/10/29 23:20:40 INFO mapreduce.Job: map 100% reduce 100%
16/10/29 23:20:40 INFO mapreduce.Job: Job job_1477726373472_0008
completed successfully
16/10/29 23:20:40 INFO mapreduce.Job: Counters: 43

既然脚本实行成功了,大家到HDFS系统来看一下是或不是科学帮大家总括好了单词的数目,如下图所示,发现确实帮大家科学总计出了单词的数额。

图片 4

image

近日倘诺大家不想在调节台打字与印刷日志,而是把日记放到某些日志文件当中并且让后台进度来进行该脚本。施行的剧本内容如下,刚才大家的服务器上曾经有wcout文件夹了,将来我们改为出口到服务器的wcout2文件夹个中,当中>>
/root/logs
的意味是将调整台的消息输出到root目录下的logs文件个中。2>&1的情趣是将错误及专业的音讯都输出到root目录下的logs文件个中。最终1个&的意思是让脚本在后台进度运转。(此地说三个小本领,便是1旦你的鼠标当前在一句不长的话初阶的地点,假诺想让光标直接固定到结尾的职位,能够按Shift+A组合键来兑现,前提是非编制情势

[root@itcast03 ~]# vim test.sh

一贯打印1二三

echo ‘123’

用来打字与印刷出试行进度的言辞

set -x
概念变量并打字与印刷输出变量的值
STR=”HELLO WORLD”
echo “$STR”
hadoop jar
/itcast/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar
wordcount /wc.txt /wcout2 >> /root/logs 2>&1 &

我们来运转下test.sh脚本,运市价况如下所示,发现本次调节台未有打字与印刷任何信息,而且壹敲回车,当前经过并从未等待worldcount程序实施完再有反馈,而是直接就回来了,真正实行脚本的是后台的叁个进程。

[root@itcast03 ~]# ./test.sh
[root@itcast03 ~]#

   我们来看一下是不是控制台信息输入到root目录下的logs文件了,发现确实如我们所愿。

图片 5

image

大家再来看一下HDFS文件系统是否生成了wcout二文件夹并且该文件夹下的结果文件中的结果是或不是科学,如下图所示,发现结果完全正确。

图片 6

image

紧接着大家来看一下怎么打字与印刷date音讯,大家在剧本中输入如下内容。

CURRENT=date +%Y-%m-%d
echo $CURRENT

写好了剧情,大家来施行脚本,实行的始末如下,发现科学打字与印刷出了今天的日子。

[root@itcast03 ~]# ./test.sh
2016-10-30
[root@itcast03 ~]#

**
最终我们来简单弄1个定期器的事例,如下所示,在那之中四个号表示的意趣为:第三个意思是分钟,第贰个的情趣是时辰,第几个的意趣是日期,第4个的意思是月份,第四个的情趣是星期。/bin/date
>>
/root/time
也正是第5个,意思是要施行的一声令下。那一个假定内定了现实的值就用实际的值,若是未有点名的话,就用暗许值,我们后天有七个,那么就暗中同意是一秒钟试行一下/bin/date并将音讯写到/root/time文件其中。*

**[root@itcast03 ~]# crontab -e

          • /bin/date >> /root/time**

过段时间大家来查看一下time文件中的内容,如下所示,发现确实是每隔一分钟执行一回命令。

** [root@itcast03 ~]# more time
Sun Oct 30 00:56:01 CST 2016
Sun Oct 30 00:57:01 CST 2016
Sun Oct 30 00:58:01 CST 2016
Sun Oct 30 00:59:01 CST 2016
Sun Oct 30 01:00:01 CST 2016**

**
当然那里只是说了三个最简便易行的例证,我们能够从网上查询特别详实的定期器的事例来学习。**

**
好了,本小节关于Shell脚本简单入门就提及那时候吧,前边还会深远学习。**

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图