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 代表失败

猜你喜欢

转载自www.cnblogs.com/zxn0628/p/11235662.html