大数据之路 03

大数据之路

Shell 编程

1.shell操作linux的桥梁

创建:

后缀为.sh的文件

编写:

头部注释为#!/bin/sh或者#!/bin/bash(注释可写可不写,建议写上)

运行:

1.通过sh命令执行

例如:sh helloworld.sh

2.通过bash命令执行

例如:bash helloworld.sh

3.通过把文件修改为可执行的文件然后通过./文件命令.sh来执行

例如:./helloworld.sh(必须在当前目录下)

通过chmod命令修改文件权限

2.变量(动态数据类型,没有数据类型的限制,并且必须初始化)

定义和初始化

格式

变量名称=值

例如:

x=10 "abc edefg"

注意:

等号两边不能有空格

使用:通过$区分变量还是一句话

格式1:

$变量

格式2:

${变量}

注意:

格式1,会把$后所有相连内容看做一个变量

格式2,${}表示值引用{}之中的内容分,对相连的内容做了一个区分

3.$0...$n:表示接收外部参数(执行脚本时,传递的参数)

格式:

$下标

注意:

$0永远表示脚本名称(所以脚本名称不算数,$0也不算第一个参数)

下标大于一位数只能使用${}获取参数,因为$下标只把第一位数据看做下标

$*获取所有参数

$#获取所有参数个数

参数个数不包括0位

在使用外部参数是 $0代表的永远是脚本的名称,并且系统只会识别个位数表示的可变参数,所以第十位识别的是第一位的可变参数,这个时候就要在脚本中对10打上大括号,这样就可以识别多位数的外部参数

  1. 引号:

单引号:安原字符串输出

双引号:可以引用变量,拥有特殊含义的内容

拼接:连续获取变量

注意:

如果有多个引号,连续的形成一对

引号中使用其他引号,其他引号做字符串使用

注意 在shell脚本中如果连续使用双引号或单引号 那么会从左往右进行判定,所以在shell脚本中,单引号和双引号必须成出现

5.字符串

获取长度

格式:

${#变量}

截取:

格式:

${变量:开始位置:长度}

注意:

${str::5}:从0获取5个

${str:0}:从0获取到末尾

替换单个

格式:

${变量/旧/新}

注意:从左向右替换第一个

替换所有

格式:

${变量//旧/新}

注意:替换不会再原字符上进行修改,想要修改原字符串只能从新赋值

删除

从头开始删除

${变量#表达式}:匹配第一个删除

${变量##表达式}:匹配最后一个删除

从尾开始删除

${变量%表达式}:匹配第一个删除

${变量%%表达式}:匹配最后一个删除

注意:从未开始删除,表达式还是从左向右去写

删除不会再原字符上进行修改,想要修改原字符串只能从新赋值

注意:此时匹配无论是从头开始还是从尾开始,都无法直接删除字符串中间的内容,并且一旦匹配失败就会立刻中断,表达式的内容服从正则表达式并且匹配的模式均是从左到右

6.运算符

算术运算符

bash不支持简单的数学运算,可以通过命令实现expr

格式1:

expr 值 + 值

注意:符号两边需要加上空格,并且是反引号

格式2:

$[值+值]

比较运算符: > < >= <=....

格式:

$值符号值

注意:比较的结果用1(true)和0(false)表示

逻辑运算符: &/and |/or !/not

例如:

#判断2>1结果

echo $[2 > 1]

#反转2>1结果

echo $[!$[2>1]]

# 反转后面的结果2>1 and 2>3 false0

echo $[!$[$[2>1]&$[2>3]]]

echo $[2>1 & 2<1]

7.if语句

格式1:

if 判断条件

then

判断为true执行的代码

fi

格式2:

if 判断条件

then

判断为true执行的代码

else

判断为false执行的代码

fi

格式3:

if 判断条件

then

判断为true执行的代码

elif 判断条件

then

判断为true执行的代码

。。。

else

判断为false执行的代码

fi

注意:else可加可不加

判断条件的写法

运算符 说明 举例 -eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。 -ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。 -gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。 -lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。 -ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。 -le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

[]:[]两边加空格,符号两边加空格并且符号前加转义符

可以使用字母

注意:此时在运用转义符来书写判断条件时,比较的是数字第一位的ASCII值,比如100的值为1。

并且在书写判断条件时,逻辑运算符,数字,中括号之间必须要有空格,否则条件就会出错

[[]]:[[]]两边加空格,符号两边加空格

可以使用字母

在使用两个中括号时,使用大于号小于号符号时可以不使用转义字符,并且在使用数字时,比较的也还是数字第一位的ASCII码值。中括号,运算符,数字之间也同样需要空格

():弃用

(()):不需要加空格,但是不能使用字母

在使用变量时,不需要使用$

两个小括号的写法是最常见的,因为括号里的条件写法完全与Java中的相同

8.for

java格式:

for ((初始化变量;判断条件;控制语句))

do

执行语句

done

python格式:

for 变量 in 结果集

do

执行语句

done

结果集:

{开始..结束}含头含尾,不能引用变量

seq 开始 结束含头含尾

例如:获取1-100的奇数和偶数和

jsum=0

osum=0

for i in {1..100}

do

if ((${i}%2==0))

then

#osum+=${i} 结果做了拼接 不是算术运算

#osum=expr ${i} + ${osum}

#osum=$[${i}+${osum}]

let osum+=i

else

let jsum+=i

fi

done

echo 偶数和为:${osum}

echo 奇数和为:${jsum}

注意:

使用let在计算时可以直接使用变量

注意:使用seq 和{} 作为结果集时,{}里只能手动去填写数字作为判定条件,而seq可以引用变量去书写判定条件

9.read:键盘录入

格式:

read 变量1 变量2 ...变量n

注意:

键盘录入时,允许给多个变量进行赋值,值和值之间以空格切分

打印三角形

for i in {1..5}

do

for j in seq 1 ${i}

do

echo -n "* "

done

echo ""

done

  1. 数组:存储多个元素,数据类型可以不同,元素元素之间以空格切分

操作

通过下标获取数据

格式:

${数组[下标]}

注意:

直接引用数组变量,默认获取下标为0的元素

下标使用*表示获取所有

获取长度:

格式:

${#数组[*]}

单独输出数组默认输出数组中下标为0的元素

11.函数

格式:

function 方法名(){

方法体

return 数字;

}

fun() 方法体所接受的参数就像上图外界参数一样,放在函数尾部,与外部参数一样的写法,但无论是方法体还是方法外,$0代表的永远都是文件名

注意:function和return可加可不加

$0...$n表示接收参数,$0永远是脚本名称(忽略)

方法的调用直接使用方法名不加()

return只能返回数字范围在0-255之间

$?接收返回值只能接收一次

此时控制面板所显示的数字为return后面的数字减去256的绝对值,return返回值的意义时判断函数是否执行成功,如果同时输出两个 $? 那么这时只有第一个在控制面版上的值是正确的,而第二个则是0。

12.获取当前日期时间

ate +"%Y-%m-%d %H:%M:%S"

格式化日期时间:

date -d today +"%Y-%m-%d %H:%M:%S"

加减日期时间

date +%Y%m%d //显示前天年月日

date +%Y%m%d --date="+1 day" //显示前一天的日期

date +%Y%m%d --date="-1 day" //显示后一天的日期

date +%Y%m%d --date="-1 month" //显示上一月的日期

date +%Y%m%d --date="+1 month" //显示下一月的日期

date +%Y%m%d --date="-1 year" //显示前一年的日期

date +%Y%m%d --date="+1 year" //显示下一年的日期

13.重定向:执行命令的结果写写入到文件

标准输入文件(stdin):stdin的文件描述符为0,默认从stdin读取数据。

标准输出文件(stdout):stdout 的文件描述符为1,默认向stdout输出数据。

标准错误文件(stderr):stderr的文件描述符为2,向stderr流中写入错误信息。

使用>,>>默认是把正确信息写入文件

想要把错误信息和正确信息写入文件需要后面追加2>&1(把错误信息当做正确信息去处理)

14.定时器:

格式:

*(分钟) *(小时) *(星期) *(几号) *(月份) commend

通过crontab -e添加定时任务

查看定时任务是否执行了,看日志tail -f /var/log/cron

注意:

定时器或脚本中涉及到路劲的全部给绝对路劲

* * * * * 每分钟

*/1 * * * * 每分钟

0 */1 * * * 每小时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值