大数据之Linux03

SSH协议
协议:方便设备或软件之间交互的便利
1.安装SSH客户端
yum list | grep ssh 找出ssh的软件名
yum -y intstall ssh软件名 安装ssh

2.连接其他设备
ssh linux02 输入密码后连接成功

3.免密连接
ssh-keygen在自身设备上生成密钥,密钥又分私钥和公钥
ssh-copy-id linux02 将公钥发送给linux02
在每台机器上重复以上操作,即可在集群间免密连接
密钥储存在/root/.ssh文件中:
autoorized-keys 中存着其他机器发送过来的公钥
id_rsa 中存在本机的私钥
id_rsa.pub中存着本机的公钥
*****如果克隆了一台已经生成过密钥的机器,需要将.ssh文件删除后,重新生成密钥,传给其他机器,才可免密连接

shell编程(命令解析器)
主要做任务调动
入门程序编写
echo “hello” ;mkdir a 两个语句可一起执行

文档内编写
vi shellfile.sh
#!/bin/bash 声明
编写执行内容 如:mkdir touch echo

执行文档方式:
1.chmod +x shellfile.sh 给sh文档赋予可执行的权限
./shellfile.sh 即可在路径下执行文档
2.sh ./shellfile.sh 直接使用sh执行
3.bash ./shellfile.sh 也可使用bash执行

远程复制文件到其他设备
scp /ect/hosts linux02:/etc/

变量
变量的定义:
name=zss 中间不能有空格
readonly name=zss 只读变量的定义,定义好后便不能再修改

变量取值的三种方式:
echo $name
echo n a m e e c h o " {name} echo " nameecho"name"
变量拼接字符串:
$name"abc" n a m e a b c " {name}abc " nameabc"name"abc

在sh文件中定义
$1
$2
$n
执行此文件时,可在执行语句后面按顺序传入n个想传入的值

运算符
shell语句在做运算时最好写成echo $(((1+2)*3))的形式

条件判断语句
判断上句执行语句是否执行成功
用echo $? 进行判断,若结果为0,表示执行成功,结果为1,执行失败,结果为127,表示语句异常

[ $name ] 判断变量是否为空
[ name ] 判断name字符串是否为空

[ $name == zss ] 判断是否相等
!= 不等

[ 1 -eq 2 ] && echo “true” || echo “false” 判断是否相等
-lt 小于
-gt 大于
-le 小于等于
-ge 大于等于
-ne 不等于
-a and
-o or
[ -e /1.txt ] 判断文件是否存在
-r 可读
-w 可写
-x 可执行
-f 是否为文件
-l 是否为快捷方式
-d 是否为文件夹

流程控制语句
if语句格式:
if [ 条件判断式 ]
then
程序
fi

或者
if [ 条件判断式1 ]
then
当条件判断式1成立时,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立时,执行程序2
…省略更多条件
else
当所有条件都不成立时,最后执行此程序
fi

.示例
#!/bin/bash
read -p “please input your name:” NAME
#echo N A M E i f [ “ NAME if [ “ NAMEif[NAME” == root ]
then
echo “hello ${NAME}, welcome !”
elif [ $NAME == tom ]
then
echo “hello ${NAME}, welcome !”
else
echo “SB, get out here !”
fi
注意事项:
(1)[ 条件判断式 ],中括号和条件判断式之间必须有空格
(2)if后要有空格

case基本语法
case $变量名 in
“值1”)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
…省略其他分支…
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac

示例
#!/bin/bash
case $1 in
“1”)
echo “banzhang”
;;
“2”)
echo “cls”
;;
*)
echo “renyao”
;;
esac

循环语句
for.基本语法
第一种:
for (( 初始值;循环控制条件;变量变化 ))
do
程序
done
第二种:
for N in 1 2 3
do
echo $N
done

for N in 1 2 3; do echo $N; done

for N in {1…30}; do echo $N; done

示例
#!/bin/bash
s=0
for((i=0;i<=100;i++))
do
s= [ [ [s+$i]
done
echo $s

#!/bin/bash
for i in $*
do
echo "ban zhang love $i "
done

while.基本语法
while [ 条件判断式 ]
do
程序
done

示例
#!/bin/bash
s=0
i=1
while [ i − l e 100 ] d o s = i -le 100 ] do s= ile100]dos=[ s + s+ s+i]
i= [ [ [i+1]
done
echo $s

可使用for循环复制一个文件到多个设备
for hostname in linux01 linux02 linux03 ;do scp sh04.sh $hostname:/doit17 ;done
也可使用for循环启动多台设备的Tomcat
for hostname in linux01 linux02 linux03 ;do ssh $hostname “. /etc/profile ;/opt/apps/apache-tomcat-7.0.47/bin/startup.sh ; exit” ;done
也可使用for循环在多台设备上运行jar包
将映射的设备名写入hostname文件中,使用cat hostname.txt读取设备名
for hostname in cat hostname.txt ;do ssh $hostname “source /etc/profile ;java -cp /doit17/xixi.jar com.doit.Test1 ; exit” ;done

自定义函数
基本语法
函数代表着一个或一组命令的集合,表示一个功能模块,常用于模块化编程。
重要说明:
在shell中,函数必须先定义,再调用
使用return value来获取函数的返回值
函数在当前shell中执行,可以使用脚本中的变量。
格式如下:

函数名()
{
命令1……
命令2….
return 返回值变量
}
[ function ] funname [()]
{
action;
[return int;]
}
如果函数名后没有(),在函数名和{ 之间,必须要有空格以示区分。
函数返回值,只能通过$? 系统变量获得,可以显示加:return 返回值,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255)

示例
#!/bin/bash
function sum()
{
s=0
s=$[ $1 + 2 ] e c h o " 2 ] echo " 2]echo"s"
}
read -p "Please input the number1: " n1;
read -p "Please input the number2: " n2;
sum $n1 $n2;

定时器
在这里插入图片描述
分钟 小时 天 月 星期 命令/脚本

示例:
4点备份
0 4 * * * cp -r /logs /root/
分 时 日 月 周
每周二至周五,下午6点 的计划任务

  • 18       *      *     2-5  (2,3,4,5)
    

1到10月份,每周二周五,下午6点的计划任务
0 18 * 1-10 2,5

时间命令
date (功能描述:显示当前时间)
date +%Y (功能描述:显示当前年份)
date +%m (功能描述:显示当前月份)
date +%d (功能描述:显示当前是哪一天)
date “+%Y-%m-%d %H:%M:%S” (功能描述:显示年月日时分秒)
显示当前时间年月日
date +%Y%m%d
20170619
显示当前时间年月日时分秒
date “+%Y-%m-%d %H:%M:%S”
2017-06-19 20:54:58
7.1.2.date 显示非当前时间
1.基本语法
(1)date -d ‘1 days ago’ (功能描述:显示前一天时间)
(2)date -d ‘-1 days ago’ (功能描述:显示明天时间)
2.案例实操
(1)显示前一天
date -d’ -1 day’ +’%Y-%m-%d’
date -d ‘1 days ago’
2017年 06月 18日 星期日 21:07:22 CST
(2)显示明天时间
date -d ‘-1 days ago’
2017年 06月 20日 星期日 21:07:22 CST
date 设置系统时间
1.基本语法
date -s 字符串时间
2.案例实操
(1)设置系统当前时间
date -s “2017-06-19 20:52:18”

使用定时器,每天创建一个已当天时间为名称的文件夹
1.写一个date.sh脚本文件
vi date.sh
#!/bin/bash
date=date -d '+1 days' +%Y-%m-%d
mkdir /doit17/date/$date
2.定时器每天固定时间创建一个该时间的文件夹
crontab -e 进入定时器编辑界面
30 22 * * * sh /doit17/date.sh

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值