当前位置:首页 > 资讯 > 正文

Java学习篇33-linux-shell与安装

Java学习篇33-linux-shell与安装

如果对您有一丁点的帮助,劳烦动动手指点个赞,您的支持和鼓励是搬砖人不断创作的动力!

 

yum概念

yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。

yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。

yum原理

注意:必须联网

不同的服务通过yum命令连接远程yum源进行查找、下载、安装

使用者权限:管理员

语法

 
  • **options:**可选,选项包括-h(帮助),-y(当安装过程提示选择全部为"yes"),-q(不显示安装的过程)等等。
  • **command:**要进行的操作。
  • package操作的对象。

yum常用命令

  • 1.列出所有可更新的软件清单命令:yum check-update
  • 2.更新所有软件命令:yum update
  • 3.仅安装指定的软件命令:yum install <package_name>
  • 4.仅更新指定的软件命令:yum update <package_name>
  • 5.列出所有可安裝的软件清单命令:yum list
  • 6.删除软件包命令:yum remove <package_name>
  • 7.查找软件包 命令:yum search
  • 8.清除缓存命令:
    • yum clean packages: 清除缓存目录下的软件包
    • yum clean headers: 清除缓存目录下的 headers
    • yum clean oldheaders: 清除缓存目录下旧的 headers
    • yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除缓存目录下的软件包及旧的headers

4.1.1 安装tree

 

执行效果如下

注意:第一次在itcast用户执行的时候

提示我们【需要管理员权限】

安装完执行tree命令

 
 

4.1.2 移除tree

 

执行效果如下

此时,我们在执行tree命令

 

执行效果如下

如上图,由于我们移除了tree,在执行tree命令的时候发现找不到这个命令了。

4.1.3 yum查找

利用 yum 的功能,找出以 tom 为开头的软件名称有哪些

 

执行效果如下

4.1.4 yum源

概述

yum需要一个yum库,也就是yum源。

简单的说,我们安装软件的时候需要下载软件,将很多软件放在一起就是源。软件安装包的来源,所以yum源就是软件安装包来源

yum源分类

目前,yum默认使用的是CentOS的yum源,如下

目前,国内有很多不错的yum源,比如阿里、网易、搜狐等

安装阿里yum源

因为默认的yum源服务器在国外,我们在安装软件的时候会受到速度的影响,所以安装国内yum源在下载的时候速度、稳定性会比国外的好很多。

1) 安装wget

 

执行效果如下

安装成功。

2) 备份/etc/yum.repos.d/CentOS-Base.repo文件

 

执行效果如下图

3) 下载阿里云的Centos-7.repo文件

 

注意

上面的url中要卸载Centos-7.repo;而不是Centos-6.repo

执行效果如下图

查看下载的阿里云的Centos-6.repo文件

 

执行效果如下

 

如上面的命令,之前是【CentOS】,现在是【aliyun】

4) 重新加载yum

 

清理之前(CentOS)的缓存

执行效果如下

 

就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。

执行效果如下

如上图,元数据缓存已建立,缓存成功。

5、验证yum源使用

 

执行效果如下

如上图所示,我们发现,现在查找软件信息使用了上面的yum缓存。

Loading mirror speeds from cached hostfile(从缓存的主机文件加载镜像速度)

  • base: mirrors.aliyun.com
  • extras: mirrors.aliyun.com
  • updates: mirrors.aliyun.com

总结

yum -y install 软件包

卸载软件
yum -y remove 软件包

查找软件

yum list *

yum源

版本:

比如我们使用的是CentOS7,在下载CentOS-Base.repo的时候要注意它的版本。

 

1、rpm介绍

rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。

2、rpm与yum区别

rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。

语法如下:

 

rpm包

注意:

以上为扩展名为.rpm的包

可以理解成是Windows中的.exe文件

安装rpm软件包

 

卸载rpm软件包

 

列出所有安装过的包

 

查询软件包信息

 

查看文件安装位置

 
 
 

4.3.1 shell入门

 

1) 什么是shell

Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

Shell 脚本(Shell Script)又称 Shell 命令稿、程序化脚本,是一种计算机程序使用的文本文件,内容由一连串的 shell 命令组成,经由 Unix Shell 直译其内容后运作

Shell 被当成是一种脚本语言来设计,其运作方式与解释型语言相当,由 Unix shell 扮演命令行解释器的角色,在读取 shell 脚本之后,依序运行其中的 shell 命令,之后输出结果。利用 shell 脚本可以进行系统管理,文件操作等。

在 Unix 及所有的系统中,如 Linux、FreeBSD 等操作系统,都存在 shell 脚本。依照 Unix shell 的各种不同类型,shell 脚本也有各种不同方言。在 DOS、OS/2、Microsoft Windows 中的批处理文件,跟 shell 脚本有类似的功能。

2) shell环境

 

Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。

查看解释器

 

执行效果如下

Linux 的 Shell 种类众多,常见的有:

  • Bourne Shell(/usr/bin/sh或/bin/sh)

  • Bourne Again Shell(/bin/bash)

  • C Shell(/usr/bin/csh)

  • K Shell(/usr/bin/ksh)

  • Shell for Root(/sbin/sh)

  • 等等……

我们当前课程使用的是 Bash,也就是 Bourne Again Shell,由于易用和免费,Bash 在日常工作中被广泛使用。同时,Bash 也是大多数Linux 系统默认的 Shell

3) 编写第一个shell

现在,我们打开文本编辑器(我们也可以使用 vi/vim 命令来创建文件),新建一个文件 czbk.sh,扩展名为 sh(sh代表shell):

 

//写shell的习惯 第一行指定解释器

//文件是sh为后缀名

//括号成对书写

//注释的时候尽量不用中文注释。不友好。

//[] 括号两端要要有空格。 [ neirong ]

//习惯代码索引,增加阅读性

//写语句的时候,尽量写全了,比如if。。。

1、创建sh文件**

 

2、编写并保存

3、查看czbk.sh文件

 
 

如上图,我们发现刚刚编写的czbk.sh文件的的权限是【-rw-rw-r–】,通过我们之前学过的知识,我们发现这个文件并没有执行的权限

我们需要将czbk.sh文件设置下它的执行权限【x】,如果不设置有执行权限,当前的文件不具备文件执行的能力。

通过chmod设置执行权限

 

执行效果如下

我们发现,czbk.sh拥有了【x】执行权限

下面,我们就开始执行czbk.sh

4、执行czbk.sh文件 — bash a.sh0

 

执行效果如下:

如上图,我们刚刚编写的shell在执行的时候正常打印出来了,说明czbk.sh具备执行的能力

注意:

#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。

echo 命令用于向窗口输出文本。

4.3.2 shell注释

 

1、单行注释

# 开头的行就是注释,会被解释器忽略。

通过每一行加一个 # 号设置多行注释,如下:

 

如果在开发过程中,遇到大段的代码需要临时注释起来,过一会儿又取消注释,怎么办呢?

每一行加个#符号太费力了,此时,我们可以通过EOF进行多行注释,如下:

2、多行注释

多行注释还可以使用以下格式:

 

EOF 也可以使用其他符号:

 

总结:

我们将在下面的小章节中使用注释,查看注释效果

4.3.3 shell变量

 

1、定义变量:

 

变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

  • 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
  • 中间不能有空格,可以使用下划线(_)。
  • 不能使用标点符号。
  • 不能使用bash里的关键字(可用help命令查看保留关键字)。

有效的 Shell 变量名示例如下:

 

无效的变量命名:

 

2、使用变量

使用一个定义过的变量,只要在变量名前面加美元符号即可,如:

 

执行效果如下

变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

 

通过上面的脚本我们发现,如果不给shell-t变量加花括号,写成echo "I am good at shell-tScript当成一个变量,由于我们前面没有定义shell-t变量,那么解释器执行执行的结果自然就为空了。这里我们推荐给所有变量加上花括号,这也是一个好的编程习惯。

已定义的变量,可以被重新定义,如:

 

执行效果如下图

这样写是合法的,但注意,第二次赋值的时候不能写。

3、只读变量

 

使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。

下面的例子尝试更改只读变量,结果报错:

 

执行效果如下图

4、删除变量

使用 unset 命令可以删除变量。语法:

 

变量被删除后不能再次使用。unset 命令不能删除只读变量。

示例如下

 

执行效果如下图

如上面的shell脚本,我们定义了一个myUrl变量,通过unset删除这个变量,然后通过echo进行输出,结果是就是为空,没有任何的结果输出。


Shell 字符串

 

单引号

 

单引号字符串的限制:

  • 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
  • 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。

双引号

 

输出结果为:

双引号的优点:

  • 双引号里可以有变量
  • 双引号里可以出现转义字符

拼接字符串

 

输出结果为:

获取字符串长度

 

输出结果:4.表示长度为4

提取字符串

以下实例从字符串第 2 个字符开始截取 4 个字符:

 

执行效果如下

输出为【bcde】,通过截取我们发现,它的下标和我们在java中的读取方式是一样的,下标也是从0开始。

4.3.4 shell数组

 

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。

定义数组

在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。如下:

 

例如:

 

或者

 

通过下标定义数组中的其中一个元素:

 

可以不使用连续的下标,而且下标的范围没有限制。

读取数组

读取数组元素值的一般格式是:

 

例如:

 

使用 @ 符号可以获取数组中的所有元素,例如:

 

获取数组的长度

获取数组长度的方法与获取字符串长度的方法相同,例如:

 

下面,我们通过一个例子,定义数组、提取数组元素的例子来验证下

 

如下

执行效果如下:

4.3.5 shell运算符

 

Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。

原生 bash **不支持 **简单的数学运算,但是可以通过其他命令来实现,例如expr。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

例如,两个数相加,我们还是利用上面的例子test-shell.sh

1、算数运算符

 

执行效果如下

注意:

表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。

完整的表达式要被 ` 包含,注意不是单引号。

下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例+加法 结果为 30。-减法 结果为 -10。*乘法 结果为 200。/除法 结果为 2。%取余 结果为 0。=赋值a=$b 将把变量 b 的值赋给 a。==相等。用于比较两个数字,相同则返回 true。[ $a == $b ] 返回 false。!=不相等。用于比较两个数字,不相同则返回 true。[ $a != $b ] 返回 true。

**注意:**条件表达式要放在方括号之间,并且要有空格,例如: [b] 是错误的,必须写成 [ $a == $b ]

下面是运算符shell脚本(还是采用之前的例子test-shell.sh )w

 

上面的shell命令#开头的为单行注释

:<<EOF 开头和EOF结尾的为多行注释

执行效果如下

2、字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符说明举例=检测两个字符串是否相等,相等返回 true。[ $a = $b ] 返回 false。!=检测两个字符串是否相等,不相等返回 true。[ $a != $b ] 返回 true。-z检测字符串长度是否为0,为0返回 true。[ -z $a ] 返回 false。-n检测字符串长度是否为0,不为0返回 true。[ -n “$a” ] 返回 true。$检测字符串是否为空,不为空返回 true。[ $a ] 返回 true。

字符串运算符实例如下(还是采用之前的例子test-shell.sh ):

 

执行效果如下

3、关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例-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。

关系运算符(还是采用之前的例子test-shell.sh )

 

执行效果如下:

4、布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符说明举例!非运算,表达式为 true 则返回 false,否则返回 true。[ ! false ] 返回 true。-o或运算,有一个表达式为 true 则返回 true。[ $a -lt 20 -o $b -gt 100 ] 返回 true。-a与运算,两个表达式都为 true 才返回 true。[ $a -lt 20 -a $b -gt 100 ] 返回 false。

布尔运算符实例如下(还是采用之前的例子test-shell.sh ):

 

执行效果如下

5、逻辑运算符

假定变量 a 为 10,变量 b 为 20:

运算符说明举例&&逻辑的 AND[[ $a -lt 100 && $b -gt 100 ]] 返回 false||逻辑的 OR[[ $a -lt 100 || $b -gt 100 ]] 返回 true

逻辑运算符实例如下(还是采用之前的例子test-shell.sh ):

 

执行效果如下

4.3.6 shell流程控制

 

1、if 语句:

主要用于判断,相当于java se中的if,我们还是采用之前的例子test-shell.sh

 

比如,我们现在通过前面学习的知识查找一个进程,如果进程存在就打印true

 

注意

末尾的fi就是if倒过来拼写

执行效果如下

2、if else 语句:

主要用于判断,相当于java se中的if else,我们还是采用之前的例子test-shell.sh。

 

上接上面的例子,如果找不到sshAAA**(此处可以随便输入一个)**进程,我们就打印false

 

执行效果如下

3、if else-if else 语句:

主要用于判断,相当于java se中的if else-if else

 

以下实例判断两个变量是否相等

我们继续使用上面的例子(test-shell.sh )

 

执行效果如下

4、for 循环

主要用于循环,相当于java se中的for循环,我们还是采用之前的例子test-shell.sh

for循环格式为

 

顺序输出当前列表中的字母:

 

执行效果如下

5、while循环

主要用于循环,相当于java se中的while循环

while循环用于不断执行一系列命令,也用于从输入文件中读取数据

语法格式为

 

以下是一个基本的while循环,测试条件是:如果int小于等于10,那么条件返回真。int从0开始,每次循环处理时,int加1。

还是采用之前的例子test-shell.sh

 

执行效果如下图

6、case … esac语句

主要用于分支条件选择,相当于java se中的switch case循环

case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

还是采用之前的例子test-shell.sh

case … esac 语法格式如下:

 

case 后为取值,值可以为变量或常数。

值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束,模式支持正则表达式。

下面通过v的值进行case–esac

 

执行效果如下

4.3.7 shell函数

 

函数语法如下:

 

注意:

  • 1、可以使用function fun() 定义函数,也可以直接fun() 定义,不带任何参数。
  • 2、函数参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255

下面我们将定义一个函数,并发生函数调用

还是采用之前的例子test-shell.sh

 

执行效果如下图

下面,我们定义一个带有return语句的函数:

 

注意:

函数返回值在调用该函数后通过 $? 来获得。

注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。

4.3.8 总结

在企业级开发过程中,我们(开发人员)学习Linux主要的目的就是在Linux系统中能够熟练的操作目录、文件,还有就是通过所学的命令系统化的编写sh文件,所以,在当前章节中,我们要熟练的编写shell脚本相关命令以及综合案例中的知识点。

欢迎扫描微信添加,技术交流+资源分享