第十九章 shell脚本的基础

  本节所讲所讲内容

   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都是可见的

局部变量  它只有在自己的进程中使用

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容