Hadoop初级之shell脚本

Shell脚本

 

Shell就是一个命令行解释器,它的作用是解释执行用户的命令,用户输入一条命令,Shell就解释执行一条,这种方式称为交互式(Interactive)。

Shell还有一种执行命令的方式称为批处理(Batch),用户事先写一 个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。Shell脚本和编程语言很相似,也有变量和流程控制语句,包括循环和分支。但Shell脚本是解释执行的,不需 要编译,Shell程序从脚本中一行一行读取并执行这些命令,相当于一个用户把脚本中的命令一行一 行敲到Shell提示符下执行。作为程序设计语言,它虽然不是 Linux系统内核的一部分,但它调用了系统内核的大部分功能来执行程序、创建文档并以并行的方式协调各个程序的运行。

shell执行脚本是一门解释性语言、批量化处理语言,大大的节省了工作成本

shell脚本第一行必须以 #!开头,它表示该脚本使用后面的解释器解释执行变量

如:#! /bin/bash

1.1定义变量

myName=”小白”

String myName=”小白”

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。  同时,变量名的命名须遵循如下规则:

?         首个字符必须为字母(a-z,A-Z)。

?         中间不能有空格,可以使用下划线(_)。

?         不能使用标点符号。

使用变量:$变量名  为了区分,我们可以使用${变量名}

1.2删除变量

使用 unset 命令可以删除变量。语法:

unset variable_name

变量被删除后不能再次使用。

实例:

#!/bin/bash

myUrl="http://www.baidu.com"

unset myUrl

echo $myUrl

2.Shell 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号

str=‘this is a string‘ 原样输出

单引号字符串的限制:

单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;

单引号字串中不能出现单引号(对单引号使用转义符后也不行)。

双引号

your_name=‘qinjx‘

str="Hello, I know your are \"$your_name\"!" 转移符

双引号的优点:

双引号里可以有变量

双引号里可以出现转义字符

3.运算符

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:


运算符


说明


举例


+


加法


`expr $a + $b` 结果为 30。,可以是数值型字符串


-


减法


`expr $a - $b` 结果为 -10。


*


乘法


`expr $a \* $b` 结果为  200。


/


除法


`expr $b / $a` 结果为 2。


%


取余


`expr $b % $a` 结果为 0。


=


赋值


a=$b 将把变量 b 的值赋给 a。


==


相等。用于比较两个数字,相同则返回 true。


[ $a == $b ] 返回 false。


!=


不相等。用于比较两个数字,不相同则返回 true。


[ $a != $b ] 返回 true。


-gt


相当于>


[ $a -gt $b ] 返回 false


-lt


相当于小于


[ $a -lt $b ] 返回 true


!



[ !true ] 返回false


-o


或 or


[ true -o false ] 返回true


-a


与 and


[ true -a false ] 返回false


-ge


大于等于


-le


小于等于

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]

运算符除了使用expr还可以通过这种方式

#!bin/bash

a=10

b=20

echo $((($a+$b)*$a))

#!/bin/bash

a=10

b=20

c=$(($a+$b))

echo $c

((d=$a+$b))

echo $d

f=`expr $a + $b`   (反引号)

echo $f

4.for循环

do和done之间的命令称为循环体

举例:

1.第一种

#!bin/bash

for i in {1..10}  1到10

do

echo haha

done

2.第二种

for file in `ls /etc`; do

echo $file

done

3.第三种

#!bin/bash

for i in $(ls /test)

do

echo $i

done

4.第四种

#!bin/bash

for((i=0;i<20;i++))

do

echo $i

done

5.自增长

1.第一种

for i in {1..10}

do

echo $i

let "i+=1"

Done

2.第二种

#!/bin/bash

for i in {1..10}

do

echo $i

((i++))

done

6.while循环

举例:

#!/bin/bash

sum=1

i=0

while(( i <= 2 ))

do

let "sum*=10"

let "i+=1"

done

echo "sum=$sum"

6.read 键盘录入

scanner

read命令接收标准输入(键盘)的输入,或其他文件描述符的输入。得到输入后,read命令将数据放入一个标准变量中。

1.读取键盘输入

#! /bin/bash

read -p 请输入第一个数字: first

read -p 请输入第二个数字: second

echo $(($first+$second))

3.读取文件里的内容

while read line

do

arr[$i]=$line

let i+=1

done < /test/a.txt

3.读取EOF之间的内容 远程登录会用到

while read line

do

echo $line

done << EOF

hehe

haha

EOF

7.数组

定义数组 list

方式1:arr=()

方式2: arr=(value1 value2 value3)   (这种方式带值)

注意:往数组里添加值,数组的长度自动增长

获取数组的长度:${#arr[*]}

遍历数组

#!/bin/bash

arr=(value value1 value2)

arr[0]=arr[1]=2

arr[2]=3

arr[3]=4

for i in ${arr[*]}; do

echo $i

done

8.条件语句

1.if else

#!/bin/bash

a=1

b=2

if [ $a -gt $b ]

then

echo "a大于b"

else

echo "a小于b"

fi

2.if elif

#!/bin/bash

if [ 1 -gt 2 ];then

echo "1>2"

elif [ 2 -gt 1 ];then

echo "2>1"

else

echo "什么鬼"

fi

If [ -f fileName ]判断是否是文件file

If [ -d fileName ]判断是否是文件夹dir

9.注释:

单行:#

多行:举例:

#!/bin/bash

:<<!

echo "hehe"

echo "aaaa"

!

echo "haha"

#!/bin/bash

: ‘        (:与’之间有空格)

echo "hehe"

echo "aaaa"

echo "haha"

10.$0,$1,$#

$0 代表文件本身的名字,你输入的是什么就显示的什么

$1 代表第一个参数

$# 代表参数的个数

$? 上一条命令的返回值

假如上一条命令执行成功:返回 ture;否则 返回 false

0 代表成功

1 代表失败

原文地址:https://www.cnblogs.com/zxn0628/p/11235662.html

时间: 2024-10-08 03:32:41

Hadoop初级之shell脚本的相关文章

Shell脚本初级练习篇

Shell脚本初级练习篇 脚本1 作用:创建10个1M的文件 [[email protected] script]# cat make_file.sh  #!/bin/bash # for i in $(seq 1 10);do     dd if=/dev/zero of=/data/test/test"${i}" bs=1M count=1 done 脚本2 作用:移走/data/test目录下大于100K的普通文件到/tmp目录下 [[email protected] scrip

Apache Hadoop 3.0.0-alpha1,重写 Shell 脚本

Apache Hadoop 3.0.0-alpha1发布了. 部分更新内容: Hadoop 3.0.0-alpha1在Java 8下编译,使用Java 7以及以下版本需更新到Java 8 重写了shell脚本,支持超过两个NameNode 详情请参照发行说明: Hadoop 3.0.0-alpha1 Release Notes 主页:http://hadoop.apache.org/docs/r3.0.0-alpha1/index.html 下载:http://hadoop.apache.org

Hadoop的shell脚本分析

你会发现hadoop-daemon.sh用于启动单独的本机节点 而hadoop-daemons.sh 会批量的ssh到别的机器启动 前记: 这些天一直学习hadoop,学习中也遇到了许多的问题,主要是对hadoop的shell脚本和hadoop的源码概念不够清楚,所以我就对hadoop的bin目录下的shell脚本进行了研究,有一些成果想记录下来,也希望大家前来批评指正. 分析原因: 很多hadoop的初学者对hadoop的脚本不是很清楚,不知道为什么可以在命令行中启动hadoop,也不知道为什

使用shell脚本实现自动化部署hadoop集群

有四台Linux服务器,其中一台为主,其它为从.服务器使用的是CentOS6.5,jdk选择1.6,hadoop选择1.0.4版本.要到实际环境中应用还要根据实际情况做修改. 如果是新装好的系统,要先配置好ip,shell脚本如下: #!bin/bash read "input ip:" ip echo 'the default hostname is master' sed -i '$aIPADDR='$ip /etc/sysconfig/network-scripts/ifcfg-

用shell脚本自动化安装hadoop

一.概述 1.1 简介 本文主要介绍怎样用 shell 实现 hadoop 的自动化安装.关于手动安装 hadoop 的步骤,可以查看以下链接: http://www.cnblogs.com/13bear/articles/3700842.html 1.2 环境 OS: CentOS release 6.4 (Final) Hadoop:Apache hadoop V1.2.1 1.3 脚本下载 http://pan.baidu.com/s/1eQHyfZk 二.脚本综述 2.1 脚本目录列表

java调用shell脚本,并获得结果集的例子

/** * 运行shell脚本 * @param shell 需要运行的shell脚本 */ public static void execShell(String shell){ try { Runtime rt = Runtime.getRuntime(); rt.exec(shell); } catch (Exception e) { e.printStackTrace(); } } /** * 运行shell * * @param shStr * 需要执行的shell * @return

批量上传文件到HDFS的Shell脚本

在做Hadoop数据挖掘项目的时候,我们第一步是源数据的获取,即把相应的数据放置到HDFS中,以便Hadoop进行计算,手动将文件上传到HDFS中,未免太费时费力,所以我们可以采取像Flume一样的框架,或者采用Shell脚本进行文件的上传.下面主要提供Shell脚本的大致写法,仅供参考,可以根据不同业务进行相应的修改. 版本1: #!/bin/bash #set java env export JAVA_HOME=/export/servers/jdk export JRE_HOME=${JA

【转载】MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法

原文地址:MySQL被慢sql hang住了,用shell脚本快速清除不断增长的慢sql的办法 作者:mchdba 某个初级dba误删index,mysql漫山遍野全是10S以上的慢sql,mysql服务被hang住了,而且慢sql不断在增加中,如果手动在mysql界面kill的话,根本来不及,这个时候,shell就必须要出手了,如下的shell脚本,大家可以参考: #It is used to kill processlist of mysql sleep #!/bin/sh while :

Flume配置|shell脚本|python|SQL

Flume是一种高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 可以看一下模型: 每一个flume代理(agent)可以提供一项flume服务.每一个代理有三个成员:source.channel.sink 如上图所示,由source获取数据并发送给channel,channel就好比一个缓冲区,由sink来从channel里读取数据. ---------------------------------------------- 暂时没有图写个思路先: 模型1:多source---1