本节所讲所讲内容
19.1 shell基本语法
19.2 shell变量以及运用
19 .3 数学运算
19.4 实战-升级系统中的java版本到1.8 版本-为后期安装Hadoop 集群做准备
19.1 shell基本语法
19.1.1 什么是shell
Shell 是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统并处理各种各样的操作输出结果,输出到屏幕反馈给用户,这种对话方式可是交互也可以是非交互的
19.1.2 编程语言分类
编程语言主要用: 低级语言和高级语言
1) 低级语言 ;
机器语言 : 二进制语言
汇编语言: 符号语言,借助使用记符来代替操作码,也就是用符号代替机器语言的二进制
它是比较接近自然语言或者人类语言的一种编程,用人们能够容易理解的方式进行编写
静态语言
动态语言: 解释性语言 PHP shell Python Perl
先写一个脚本体验一下
1 )[root@localhost ~]# vim test.sh
2) 如下
3)[root@localhost ~]# chmod +x test.sh
可以看到有出现在屏幕上
4)[root@localhost ~]# ./test.sh
hello world
注释: !/bin/bash 作用:告诉脚本使用的是哪种命令解释器,如不只shell,以当前shell作为执行的shell,
2 在shell中以# 开头表示,整个行就被当做一个注释,执行时被胡烈
3 shell程序一般以.sh 结尾
创建shell程序的步骤
第一步: 创建一个包含命令和控制结构的文件
第二步 修改这个文件的权限使它可以执行,使用chmod u+x
第三步 检查语法错误
第四步 执行 ./example
shell 脚本的执行通常有以下几种方式
1 /root/test.sh 或者./ test.sh 当前路径下执行脚本的话要有执行权限chmod + test.sh
2 bash test.sh 或者sh test.sh 这种方式可以不对脚本文件添加执行权限
3 source test.sh 可以没有执行全兴
4 sh< test.sh 或者cat test.sh | sh(bash)
19.2 SHELL 变量以及运用
变量是shell传递数据的一种方法,变量是用啦代表每个值的符号名,我们可以把变量当做一个容器,通过变量,可以在内存中存储数据,也可以在脚本执行中进行修改和访问存储的数据
变量的设置规则
1 变量名称通常是大写字母,它可以由数字,字母大小写和下划线组成,变量名区分大小写,但是大家要注意变量名称
变量的分类
按照变量的作用可以分为4类
1 用户自定义变量
2 环境变量 这种变量中主要保存的是和系统操作环境相关的数据
3 位置参数变量,这种变量主要是用来向脚本当中传递参数或主句的,变量名不能自定义变作用是固定的
4 预定义变量: 是Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的,PATH
19.2.2 用户自定义变量
变量名命名规则,规则,由字母或者下划线打头,不允许数字开头,后面由字母。数字或下划线组成,并且大小写意义不同,在使用变量时,在变量名前加$
[root@localhost ~]# var1=123 单引号和双引号都可以
[root@localhost ~]# echo $var1
123
variable 变量
例2 :错误的赋值方式,不允许数字开头,等号两边不能有空格
例3 : 变量值的叠加 。使用$ {}
$name 是${name} 的简化版本,但是在某些情况下,还必须使用花括号引起的方式来消除
[root@localhost ~]# var4=mysql
[root@localhost ~]# echo $var4
mysql
[root@localhost ~]# echo $var4-db.log
mysql-db.log
[root@localhost ~]# echo $var4.db.log
mysql.db.log
[root@localhost ~]# echo $var4db.log 输出的结果不是我们想要的,怎么办
.log
[root@localhost ~]# echo ${var4}db.log
mysqldb.log
19.2.3 命令的替换 使用$() 或者反引号
[root@xueshen65 ~]# date -s "2020-4-6 17:40" 改系统时间
例1 在命令中就调用date命令
扩展:date 命令是显示或设置系统时间与日期
-s <字符串> 根据字符串来设置日期与时间,字符串前后必须加上双引号
<+ 时间日期格式> 指定显示时,使用特定的日期时间格式
[root@localhost ~]# date +%Y-%m-%d
2020-04-06
[root@localhost ~]# date +'%Y-%m-%d %H:%M:%S' 使用- 做分隔符 一般
2020-04-06 17:48:07
注: %y 是显示两位 %Y 是显示4位
date + %Y%md%d 显示前天年月日
date -d '+1day' +%Y%m%d # 显示前一天的日期
date -d '-1day' +%Y%m%d # 显示后一天的日期
date -d '-1month' +%Y%m%d # 显示前一个月的日期
date -d '+month' +%Y%m%d # 显示下一个月的日期
date -d '-1year' +%Y%m%d # 显示前一年的日期
date -d '+1year' +%Y%m%d # 显示后一天的日期
设置时间精确到秒
[root@xueshen65 ~]# date -s '2020-4-6 17:59:23'
2020年 04月 06日 星期一 17:59:23 CST
例1 :在命令中调用date 命令输出值
[root@xueshen65 ~]# echo $(date)
2020年 04月 06日 星期一 18:06:49 CST
[root@xueshen65 ~]# echo `date +'%Y-%m-%d'` 使用反引号 引出
2020-04-06
[root@xueshen65 ~]# echo `date` 或者直接反引号
2020年 04月 06日 星期一 18:10:10 CST
19.2.4 命令的嵌套 使用 使用$( $ ( ) )
[root@localhost ~]# var6=$(tar -zcvf root.tar.gz $(find /root/ -name *.txt))
[root@localhost ~]# echo $var6 var6 中存储着tar 的标准输出
/root/a.txt
实战:分享一个系统时间错误。引起tar警告
19.2.5 shell中单引号和双引号区别
‘’ 在单引号所有的字符包特殊字符($,'' ` \ ) 都将解释成字符本身二成为普通字符
“” 在双引号中,除了$ '' , ` 和\ 以外 的字符都解释成字符本身,拥有 ”调用变量的值” “引用命令” 和 转义符的特殊含义
注 :\ 转义符跟在\ 之后的特殊符号失去特殊含义,变为普通字符,如\$ 将输出$ 符号,二不当做是变量引用
[root@localhost ~]# echo \$
$
例1 : 给变量赋予多个单词,需要使用单引号和双引号
[root@localhost ~]# var8='xuegod mk' 单双引号都可以
[root@localhost ~]# echo $var8
xuegod mk
[root@localhost ~]#
例2 赋值 时单引号和双引号的区别
[root@localhost ~]# var8='xuegod mk $var1'
[root@localhost ~]# var9="xuegod mk $var1"
[root@localhost ~]# echo $var8
xuegod mk $var1
[root@localhost ~]# echo $var9
xuegod mk 123
注意 :单引号之间的内容原封不动赋值给变量,双引号之间的内容如有特殊符号会保留
删除变量
[root@localhost ~]# unset var1
再次查看的时候发现没了
[root@localhost ~]# echo $var1
19.2.6 环境变量
在bash shell 中 环境变量分为两类,全局变量和局部变量
全局变量:对于shell会话和所有的子shell都是可见的
局部变量 它只有在自己的进程中使用