Linux课堂笔记(2)
Linux课堂笔记(2)
1 Linux文件管理
1.1 touch命令
touch命令用于创建文件、修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
ls -l 可以显示档案的时间记录
使用者权限:所有权限用户
语法
touch [-acfm][-d<日期时间>][-r<参考文件或目录>] [-t<日期时间>][--help][--version][文件或目录…]
- 参数说明:
- a 改变档案的读取时间记录。
- m 改变档案的修改时间记录。
- c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。
- f 不使用,是为了与其他 unix 系统的相容性而保留。
- r 使用参考档的时间记录,与 --file 的效果一样。
- d 设定时间与日期,可以使用各种不同的格式。
- t 设定档案的时间记录,格式与 date 指令相同。
- –no-create 不会建立新档案。
- –help 列出指令格式。
- –version 列出版本讯息。
使用 touch 创建一个空文件
在 Linux 系统上使用 touch
命令创建空文件,键入 touch
,然后输入文件名。如下所示
touch czbk-devops.txt
查看
ls -l czbk-devops.txt
使用 touch 创建批量空文件
在实际的开发过程中可能会出现一些情况,我们必须为某些测试创建大量空文件,这可以使用 touch
命令轻松实现
touch czbk-{1..10}.txt
改变/更新文件访问时间
假设我们想要改变名为 czbk-devops.txt 文件的访问时间,在 touch
命令中使用 -a
选项,然后输入文件名。如下所示:
1、我们先 查看下czbk-devops.txt的时间属性
ls -l czbk-devops.txt
touch czbk-devops.txt
执行ls命令查看,如下
ls -l czbk-devops.txt
我们也可以使用stat命令进行查看,如下:
stat czbk-devops.txt
关于stat命令:
stat命令用于显示inode内容。
stat以文字的格式来显示inode的内容。
语法
stat [文件或目录]
1.2 vi与vim命令
1.2.1 vi/vim介绍
使用vi/vim其实就相当于我们在Windows系统中创建文件、打开文件、编辑文件、保存文件操作
1、vi介绍
vi是 visual interface
的简称, 是linux中最经典的文本编辑器。
- vi的特点
- 只能是编辑 文本内容, 不能对 字体 段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
- vi编辑器在 系统管理 服务器管理 编辑文件时, 其功能永远不是图形界面的编辑器能比拟的
2、vim介绍
vim:是从 vi (系统内置命令)发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。
简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。
vim 则可以说是程序开发者的一项很好用的工具。
1.2.2 vi/vim模式
vi/vim模式主要分为以下三种:
命令模式:在Linux终端中输入“vim 文件名”就进入了命令模式,但不能输入文字。
编辑模式在命令模式下按i就会进入编辑模式,此时就可以写入程式,按Esc可回到命令模式。
末行模式在命令模式下按:进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行。
上图总结
上面的三种模式简单总结下就是:
1、vim 开始进入时是命令模式
2、按下I的时候会进入编辑模式
3、按下ESC然后在按下:的时候是末行模式
1.2.3 打开和新建文件
使用vim不但可以打开一个现存的文件;也可以生成(vim后的文件不存在的情况下)一个文件;有点类似于我们在Windows中输入notepad命令一样,我们输入notepad后就会打开一个文本文档,然后进行编辑--另存为。
使用者权限:当前文件的权限用户
- 在终端中输入vim在后面跟上 文件名 即可
vim txtfile.txt
- 如果文件已经存在, 会直接打开该文件
- 如果文件不存在, 保存且退出时 就会新建一个文件
注意
我们通过下面的三种模式切换详细阐述vim的用法
1.2.4 三种模式切换
1、进入命令模式
上接上面的例子,我们执行下面的命令其实就是进入了命令模式
vim txtfile.txt
2、进入编辑模式
上接上面的例子,按i进入插入模式
- 在 vi 中除了常用
i
进入编辑模式 外, 还提供了一下命令同样可以进入编辑模式
命令 | 英文 | 功能 | 常用 |
---|---|---|---|
i | insert | 在当前字符前插入文本 | 常用 |
I | insert | 在行首插入文本 | 较常用 |
a | append | 在当前字符后添加文本 | |
A | append | 在行末添加文本 | 较常用 |
o | 在当前行后面插入一空行 | 常用 | |
O | 在当前行前面插入一空行 | 常用 |
3、进入末行模式
编辑模式不能保存文件
必须先推到命令模式
先按Esc键退出到命令模式
然后按小写的**:wq 正常保存退出**
进入末行模式—》按符号: 鼠标跑到屏幕的最后一行,执行效果如下图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mMLOxI1-1646139052912)(assets/1576655879564.png)]
然后按小写的** :wq 正常保存退出**
以下为其他的退出模式:
:q 当vim进入文件没有对文件内容做任何操作可以按"q"退出
:q! 当vim进入文件对文件内容有操作但不想保存退出
:wq 正常保存退出
:wq! 强行保存退出,只针对与root用户或文件所有人生
1.2.5 文件查看
以下5个为文件查看命令,
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | cat 文件名 | concatenate | 查看小文件内容 |
02 | less -N 文件名 | less | 分频 显示大文件内容 |
03 | head -n 文件名 | 查看文件的前一部分 | |
04 | tail -n 文件名 | 查看文件的最后部分 | |
05 | grep 关键字 文件名 | grep | 根据关键词, 搜索文本文件内容 |
总结:
以上5个命令都可以查询文件的内容,他们的功能如下
通过
cat
会一次显示所有的内容, 适合 查看内容较少 的文本文件
less
命令适合查看 内容较多 的文本文件通过
head
命令查看文档的前几行内容通过
tail -10f 文件
命令 查看文档(日志)的后几行内容通过
grep
命令 搜索存在 关键字 的行
1) cat命令
cat 是一个文本文件查看和连接工具。查看一个文件的内容,用cat比较简单,就是cat 后面直接接文件名,如cat txtFiles.txt
使用者权限:当前文件的权限用户
语法格式
cat [-AbeEnstTuv] [--help] [--version] fileName
查看文件名为txtfile.txt的内容
cat txtfile.txt
查看文件名为txtfile.txt的内容(加入行号)
cat -n txtfile.txt
2) grep命令
grep命令在使用的时候类似于我们的程序中的查询,或者在txt文档中通过ctr+f查找
grep除了能对文件操作为还可以查看我们的进程信息,类似于我们在Windows系统的任务管理器(任务栏--右键---启动任务管理器--进程)下的进程
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为 -,则 grep 指令会从标准输入设备读取数据。
grep 命令用于查找文件里符合条件的字符串,语法如下:
grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
使用者权限:当前文件的权限用户
1、搜索 存在关键字【eeee】 的行的文件
grep eeee txtfile.txt
2、搜索 存在关键字【eeee】 的行 且 显示行号
grep -n eeee txtfile.txt
3、忽略大小写 搜索 存在关键字 的行
grep -i EEEE txtfile.txt
4、搜索 不存在关键字 的行
grep -v 中国 txtfile.txt
5、查找指定的进程信息(包含grep进程)
ps -ef | grep sshd
6、查找指定的进程信息(不包含grep进程)
ps aux | grep sshd | grep -v "grep"
7、查找进程个数
ps -ef|grep -c sshd
由上图可知sshd的进程个数为4(包含grep进程本身)
3) tail命令
tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
使用者权限:当前文件的权限用户
命令格式:
tail [参数] [文件]
1、要显示 txtfile.txt 文件的最后 3 行,请输入以下命令:
tail -3 txtfile.txt
2、动态显示文档的最后内容,一般用来查看日志,请输入以下命令:
tail -f txtfile.txt
此命令显示 txtfile.txt 文件的最后 10 行。当将某些行添加至 txtfile.txt 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。
如果要显示最后4行,命令如下:
tail -4f txtfile.txt
3、显示文件txtfile.txt 的内容,从第 2 行至文件末尾
tail -n +2 txtfile.txt
4、显示文件 txtfile.txt的最后 10 个字符:
tail -c 45 txtfile.txt
总结
在tail使用的过程中,我们使用最多的就是查看文件末尾多多少行
使用tail -nf txtfile.txt
通常都是在查看日志信息(报错调试时使用)
4)less命令
less用于查看文件,但是less 在查看之前不会加载整个文件。
使用者权限:当前文件的权限用户
语法
less [参数] 文件
1、查看txtfile.txt文件
less txtfile.txt
2、查看命令历史使用记录并通过less分页显示
[itcast@localhost ~]$ history | less1 ifconfig2 reboot3 ifconfig4 reboot5 ifconfig6 su root7 ifconfig8 ping www.baidu.com9 \10 ifconfig11 date12 hwclock --systohc13 su root......略
我们输入【j】可以前进行
输入【k】可以后退行
输入【G】可以 移动到最后一行
输入【g】可以移动到第一行
输入【ctrl + F】 向前移动一屏(类似于我们在浏览器中的数据分页的下一页)
输入【ctrl + B】 向后移动一屏(类似于我们在浏览器中的数据分页的上一页)
1.2.6 vim定位行
在日常工作中,有可能会遇到打开一个文件,并定位到指定行的情况
例如: 在开发时, 知道某一行代码有错误,可以快速定位到出错误代码的位置
这个时候,可以使用以下命令打开文件
vim txtfile.txt +6
1.2.7 异常处理
- 如果 vim异常退出, 在磁盘上可能会保存有 交换文件
- 下次再使用 vim 编辑文件时, 会看到以下屏幕信息,
解决方案:
将后缀名为.swp的文件删除即可恢复
再次编辑文件不在出现提示警告!
1.3 echo 命令
echo命令有点类似于我们在java se阶段学习的 System.out.print("hello")
但是,echo还有一个功能就是追加文件内容到文件,类似于我们在java se阶段学习的append文件流写入一样
使用者权限:所有用户
echo string
将字符串输出到控制台 , 通常和 重定向 联合使用
echo hello world# 如果字符串有空格, 为了避免歧义 请增加 双引号 或者 单引号
echo "hello world"
6.3 重定向 >
(覆盖) 和 >>
(追加)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1tbhy3rt-1646139052925)(assets/1558435686066-1576721493121.png)]
- 默认情况下 命令的结果 输出到 控制台
- 通过 重定向 可以将结果 输出到文件
6.2.3 实现
- 第一步: 将命令的成功结果 覆盖 指定文件内容
echo 传智博客 >czbk-txt.txt
执行结果如下(czbk-txt.txt文件如果没有会自动创建)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0g32Qqj0-1646139052925)(assets/1576721910460.png)]
命令 | 作用 |
---|---|
结果 > 文件名 |
> 表示输出, 会覆盖文件的原有内容
|
第二步: 将命令的成功结果 追加 指定文件的后面
echo 黑马程序员 >> czbk-txt.txt
执行结果如下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wgh60NqP-1646139052925)(assets/1576721980097.png)]
命令 | 作用 |
---|---|
命令 >> 文件名 |
>> 表示追加, 会将内容追加到已有文件的末尾
|
第三步: 将命令的失败结果 追加 指定文件的后面
cat 不存在的目录 &>> error.log
命令 | 作用 |
---|---|
命令 &>> 文件
|
&>> 表示不区分错误类型 都放到 日志中
|
总结
- 通过
命令 > 文件
将命令的成功结果 覆盖 指定文件内容- 通过
命令 >> 文件
将命令的成功结果 追加 指定文件的后面- 通过
命令 &>> 文件
将 命令的失败结果 追加 指定文件的后面
1.4 awk命令
AWK是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
具体语法如下
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
1、数据准备:czbk-txt.txt文本内容如下:
zhangsan 68 99 26
lisi 98 66 96
wangwu 38 33 86
zhaoliu 78 44 36
maq 88 22 66
zhouba 98 44 46
2、搜索含有 zhang 和 li 的学生成绩:
cat czbk-txt.txt | awk '/zhang|li/'
指定分割符, 根据下标显示内容
命令 | 含义 |
---|---|
awk -F ‘,’ ‘{print $1, $2, $3}’ 文件 | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项
选项 | 英文 | 含义 |
---|---|---|
-F ','
|
field-separator | 使用 指定字符 分割 |
$ + 数字
|
获取第几段内容 | |
$0
|
获取 当前行 内容 | |
NF
|
field | 表示当前行共有多少个字段 |
$NF
|
代表 最后一个字段 | |
$(NF-1)
|
代表 倒数第二个字段 | |
NR
|
代表 处理的是第几行 |
# 查看文档内容
cat czbk-txt.txt
#直接输出
cat score.txt | awk -F ' ' '{print $1,$2,$3}'
指定分割符, 根据下标显示内容
命令 | 含义 |
---|---|
awk -F ’ ’ ‘{OFS="==="}{print $1, $2, $3}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
选项
选项 | 英文 | 含义 |
---|---|---|
OFS="字符"
|
output field separator | 向外输出时的段分割字符串 |
转义序列 | 含义 |
---|---|
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
调用 awk 提供的函数
命令 | 含义 |
---|---|
awk -F ‘,’ ‘{print toupper($2)}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
常用函数如下:
函数名 | 含义 | 作用 |
---|---|---|
toupper() | upper | 字符 转成 大写 |
tolower() | lower | 字符 转成小写 |
length() | length | 返回 字符长度 |
求指定学科平均分
命令 | 含义 |
---|---|
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名 |
BEGIN{ 这里面放的是执行前的语句 } {这里面放的是处理每一行时要执行的语句} END {这里面放的是处理完所有的行后要执行的语句 } |
查看czbk-txt.txt 文件内容
cat czbk-txt.txt
查看总分
注意:这里计算的是第4列的总分
cat czbk-txt.txt| awk -F ' ' 'BEGIN{}{total=total+$4} END{print total}'
查看总分, 总人数
注意:这里计算的是第4列的
cat czbk-txt.txt| awk -F ' ' 'BEGIN{}{total=total+$4} END{print total, NR}'
查看总分, 总人数, 平均分
注意:这里计算的是第4列的
cat czbk-txt.txt | awk -F ' ' 'BEGIN{}{total=total+$4} END{print total, NR, (total/NR)}'
总结
awk在使用过程中主要用作分析
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理
1.5 软连接
软连接其实就类似于我们在Windows中的【快捷方式】
在Linux文件名 和 内容 是两个文件, 分开的![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FDL5356Z-1646139052930)(assets/1558439106175.png)]
为什么有软连接?
因为 某些文件和目录 的 路径很深, 所以 需要增加 软链接(快捷方式)
使用者权限:所有用户
语法如下:
命令 | 英文 | 作用 |
---|---|---|
ln -s 目标文件绝对路径 快捷方式路径 | link | 给目标文件增加一个软链接, 通俗讲就是快捷方式 |
给home/itcast/txtfile.txt文件增加软连接
ln -s /home/itcast/txtfile.txt czbk-txt
上面;我们将/home/itcast/路径下的txtfile.txt文件增加软连接到
czbk-txt,然后通过cat 访问czbk-txt也是可以正常访问的
如下图
总结
通过 `ln -s 源文件的绝对路径 其实就是给目标文件 增加 快捷方式
1.6 find查找
引子
find命令类似与在Windows中全局查找(如下图)
find概念
find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find <指定目录> <指定条件> <指定内容>
1、将目前目录及其子目录下所有延伸档名是 gz 的文件查询出来
find . -name "*.gz"
执行效果如下图
[外
2、将目前目录及其子目录下所有最近 1天内更新过的文件查询出来
find . -ctime -1
执行效果如下
3、全局搜索czbk
/代表是全盘搜索,也可以指定目录搜索
find / -name 'czbk'
1.7 read命令
read命令用于从标准输入读取数值。
read 内部命令被用来从标准输入读取单行数据。这个命令可以用来读取键盘输入,当使用重定向的时候,可以读取文件中的一行数据。
语法
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt] [-t timeout] [-u fd] [name ...]
1、简单读取
#!/bin/bash
echo "请您输入网站名: "
#读取从键盘的输入
read website
echo "你输入的网站名是 $website"
exit 0 #退出
每次调用 read 命令都会读取文件中的 “一行” 文本。当文件没有可读的行时,read 命令将以非零状态退出。
我们可以使用 cat 命令将结果直接传送给包含 read 命令的 while 命令。
测试文件 test.txt 内容如下:
AAAAAAAAAAAAAAAAAAAAAA
BBBBBBBBBBBBBBBBBBBBBB
CCCCCCCCCCCCCCCCCCCCCC
DDDDDDDDDDDDDDDDDDDDDD
================传智播客
脚本如下,可以将脚本放到xxx.sh中进行执行
#!/bin/bash
count=1
cat test.txt | while read line
# cat 命令的输出作为read命令的输入,read读到>的值放在line中
doecho "Line $count:$line"count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
总结
由此可看read命令不仅可以读取键盘输入,而且还可以读取静态文件
1.8 总结
文件命令是我们在开发过程中最经常使用的到的命令,所以,我们在学习过程中一定要认真学习文件的常用命令,比如文件创建、编写、读取命令。
2 Linux备份压缩
2.1 gzip命令
压缩/解压缩文件,不能压缩目录
windows下接触的压缩文件大多是.rar,.7z格式,Linux下,不能识别这种格式。
.zip格式的文件在Windows和Linux下都能使用。
压缩文件,能节省磁盘空间,传输时能节省网络带宽
gzip命令用于压缩文件。
gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名
使用者权限:所有用户
语法
gzip[参数][文件或者目录]
1、压缩目录下的所有文件
数据准备,新建一个目录,里面随便新建4个文件
mkdir gzipTest
cd gzipTest/
touch 001
touch 002
touch 003
touch 004
1、压缩目录下的所有文件
gzip *
2、 列出详细的信息
解压文件并列出详细信息
gzip -dv *
执行效果如下图
2.2 gunzip命令
gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件
gunzip命令用于解压文件。
语法
gunzip[参数][文件或者目录]
gunzip 001.gz
001为解压后的文件
2.3 tar命令
tar的主要功能是打包、压缩和解压文件。tar本身不具有压缩功能。他是调用压缩功能实现的 。
使用者权限:所有用户
语法
tar[必要参数][选择参数][文件]
1、将 txtfile.txt文件打包(仅打包,不压缩)
txtfile.txt文件为上面章节的例子
tar -cvf txt.tar txtfile.txt
2、将 txtfile.txt文件打包压缩(打包压缩(gzip))
tar -zcvf txt.tar.gz txtfile.txt
总结
参数 f 之后的文件档名是自己取的,我们习惯上都用 .tar 来作为辨识。 如果加 z 参数,则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar包
3、查看tar中有哪些文件
tar -ztvf txt.tar.gz
压缩包中的文件有txtfile.txt
4、将tar 包解压缩
1.新建目录mkdir ysFiles
2.复制cp txt.tar.gz ./ysFiles/
3.解压缩tar -zxvf /home/itcast/ysFiles/txt.tar.gz
2.4 zip命令
引子
zip命令就完全的相当于在Windows下面选中文件右键进行压缩了
zip命令用于压缩文件。
zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
使用者权限:所有用户
语法
zip[必要参数][选择参数][文件]
将上面/home/itcast/gzipTest 这个目录下所有文件和文件夹打包为当前目录下的 zFiles.zip:
1.在目录下新建一个005目录
mkdir 005
开始压缩
2.压缩
zip -q -r zFiles.zip *
2.5 unzip命令
Linux unzip命令用于解压缩zip文件
unzip为.zip压缩文件的解压缩程序
使用者权限:所有用户
语法
unzip[必要参数][选择参数][文件]
参数:
上接上面的zip的例子
1、查看压缩文件中包含的文件:
unzip -l zFiles.zip
2、如果要把文件解压到指定的目录下,需要用到-d参数
1.新建目录
unFiles
2.解压缩
unzip -d ./unFiles zFiles.zip
2.6 bzip2命令
bzip2命令是.bz2文件的压缩程序。
若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
使用者权限:所有用户
语法
bzip2 [-cdfhkLstvVz][--repetitive-best][--repetitive-fast][- 压缩等级][要压缩的文件]
1、压缩文件
1.创建目录mkdir bzFilescd ./bzFiles/
2.创建文件
touch 001
3.压缩
bzip2 001
ll
2.7 bunzip2命令
引子
Linux bunzip2命令是.bz2文件的解压缩程序。
使用者权限:所有用户
语法:
bunzip2 [-fkLsvV][.bz2压缩文件]
参数:
解压.bz2文件
bunzip2 -v 001.bz2
2.8 总结
gz:由gzip压缩工具压缩的文件。
.bz2:由bzip2压缩工具压缩的文件。
.tar:由tar打包程序打包的文件(tar没有压缩功能,只是把一个 目录合并成一个文件)
.tar.gz:可理解为先由tar打包,再由gz压缩。
.zip:可理解为由zip压缩工具直接压缩
3 网络与磁盘管理
3.1 网络命令
3.1.1 ifconfig命令
ifconfig是Linux中用于显示或配置网络设备的命令,英文全称是network interfaces configuring
ifconfig命令用于显示或设置网络设备。
ifconfig可设置网络设备的状态,或是显示目前的设置。
使用者权限:所有(设置级别的需要管理员)用户
语法
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
1、显示激活的网卡信息
ifconfig
**ens33(有的是eth0)**表示第一块网卡。
表示ens33网卡的 IP地址是 192.168.23.129,广播地址,broadcast 192.168.23.255,掩码地址netmask:255.255.255.0 ,inet6对应的是ipv6
ens37 表示第二块网卡
lo 是表示主机的回坏地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口
启动关闭指定网卡
virbr0是一种虚拟网络接口
2、关闭网卡(需要切换到管理员账户)
ifconfig ens37 down
3、启用网卡(需要切换到管理员账户)
ifconfig ens37 up
4、配置ip信息
// 配置ip地址
ifconfig ens37 192.168.23.199
// 配置ip地址和子网掩码
ifconfig ens37 192.168.23.133 netmask 255.255.255.0
这样的话我们就可以通过命令的方式设置网卡的网络信息了。
3.1.2 ping命令
等价于Windows的ping命令
ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
使用者权限:所有用户
语法
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]
1、检测是否与主机连通
ping www.baidu.com
icmp_seq:ping序列,从1开始
ttl:IP生存时间值
time: 响应时间,数值越小,联通速度越快
2、指定接收包的次数
和上面不同的是:收到两次包后,自动退出
ping -c 2 www.baidu.com
总结:
ping命令也是我们在开发过程中常用到的命令
通常使用 ping xxx.xxx.xxx.xxx命令进行检测本地与目标机器是否连通
3.1.3 netstat命令
利用netstat指令可让你得知整个Linux系统的网络情况
netstat命令用于显示网络状态。
使用者权限:所有用户
语法
netstat [-acCeFghilMnNoprstuvVwx][-A<网络类型>][--ip]
1、显示详细的连接状况
netstat -a
2、显示网卡列表
netstat -i
3.2 磁盘命令
3.2.1 lsblk命令
使用lsblk命令可以以tree的形式展示所有设备的信息
lsblk命令的英文是“list block”,即用于列出所有可用块设备的信息,而且还能显示他们之间的依赖关系,但是它不会列出RAM盘的信息。
**语法格式:**lsblk [参数]
使用者权限:所有用户
1、lsblk命令默认情况下将以树状列出所有块设备:
lsblk
2、默认选项不会列出所有空设备:
lsblk -f
执行效果如下图
3.2.2 df命令
使用者权限:所有用户
语法
df [选项]... [FILE]...
1、显示磁盘使用情况统计情况
df
2、df命令也可以显示磁盘使用的文件系统信息
3、df显示所有的信息
df --total
4、df换算后显示
df -h
3.2.3 mount命令
mount命令是经常会使用到的命令,它用于挂载Linux系统外的文件。
挂载概念
在安装linux系统时设立的各个分区,如根分区、/boot分区等都是自动挂载的,也就是说不需要我们人为操作,开机就会自动挂载。但是光盘、u盘等存储设备如果需要使用,就必须人为的进行挂载。
其实我们在windows下插入U盘也是需要挂载(分配盘符)的,只不过windows下分配盘符是自动的
Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。
注意:“挂载点”的目录需要以下几个要求:
(1)目录事先存在,可以用mkdir命令新建目录;
(2)挂载点目录不可被其他进程使用到;
(3)挂载点下原有文件将被隐藏。
使用者权限:所有用户,设置级别的需要管理员
语法
mount [-hV]
mount -a [-fFnrsvw] [-t vfstype]
mount [-fnrsvw] [-o options [,...]] device | dir
mount [-fnrsvw] [-t vfstype] [-o options] device dir
需求:
比如现在我们要通过挂载的方式查看Linux CD/DVD光驱里面的内容
1、CD/DVD设置
进入【虚拟机】–【设置】
设置CD/DVD的内容,我们这里使用的是F:\CentOS-7-x86_64-DVD-1810.iso
查看F:\CentOS-7-x86_64-DVD-1810.iso;里面的内容
2、创建挂载点
注意:一般用户无法挂载cdrom,只有root用户才可以操作
我们切换到root下创建一个挂载点(其实就是创建一个目录)
mkdir -p mnt/cdrom
3、开始挂载
通过挂载点的方式查看上面的【ISO文件内容】
mount -t auto /dev/cdrom /mnt/cdrom
4、查看挂载点内容
ls -l -a ./mnt/cdrom/
5、卸载cdrom
在前面我们将CD/DVD挂载到了文件系统,如果我们不用了,就可以将其卸载掉
umount ./mnt/cdrom/
3.3 总结
关于挂载:用户不能直接访问 硬件设备需要将硬件设备 挂载 到 系统目录上, 才可以让用户访问。
4 shell与安装
tips
重点讲解内容
4.1 yum使用
yum概念
yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器。
yum提供了查找、安装、删除某一个、一组甚至全部软件包的命令,而且命令简洁而又好记。
yum原理
注意:必须联网
不同的服务通过yum命令连接远程yum源进行查找、下载、安装
使用者权限:管理员
语法
yum [options] [command] [package ...]
- **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
yum -y install tree //y当安装过程提示选择全部为"yes"
执行效果如下
注意:第一次在itcast用户执行的时候
提示我们【需要管理员权限】
安装完执行tree命令
tree
4.1.2 移除tree
yum remove tree
tree
如上图,由于我们移除了tree,在执行tree命令的时候发现找不到这个命令了。
4.1.3 yum查找
利用 yum 的功能,找出以 tom 为开头的软件名称有哪些
yum list tom*
4.1.4 yum源
概述
yum需要一个yum库,也就是yum源。
简单的说,我们安装软件的时候需要下载软件,将很多软件放在一起就是源。软件安装包的来源,所以yum源就是软件安装包来源
yum源分类
目前,yum默认使用的是CentOS的yum源
安装阿里yum源
因为默认的yum源服务器在国外,我们在安装软件的时候会受到速度的影响,所以安装国内yum源在下载的时候速度、稳定性会比国外的好很多。
1) 安装wget
yum install -y wget
2) 备份/etc/yum.repos.d/CentOS-Base.repo文件
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.back
3) 下载阿里云的Centos-7.repo文件
wget -O CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
注意
上面的url中要卸载Centos-7.repo;而不是Centos-6.repo
查看下载的阿里云的Centos-6.repo文件
cat CentOS-Base.repo
执行效果如下
# CentOS-Base.repo
#
# The mirror system uses the connecting IP address of the client and the
# update status of each mirror to pick mirrors that are updated to and
# geographically close to the client. You should use this for CentOS updates
# unless you are manually picking other mirrors.
#
# If the mirrorlist= does not work for you, as a fall back you can try the
# remarked out baseurl= line instead.
#
#[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#released updates
[updates]
name=CentOS-$releasever - Updates - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/updates/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/extras/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/contrib/$basearch/http://mirrors.aliyuncs.com/centos/$releasever/contrib/$basearch/http://mirrors.cloud.aliyuncs.com/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
如上面的命令,之前是【CentOS】,现在是【aliyun】
4) 重新加载yum
yum clean all
清理之前(CentOS)的缓存
yum makecache
就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。
5、验证yum源使用
yum search tomcat
如上图所示,我们发现,现在查找软件信息使用了上面的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的时候要注意它的版本。
4.3.1 shell入门
1) 什么是shell
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Shell 被当成是一种脚本语言来设计,其运作方式与解释型语言相当,由 Unix shell 扮演命令行解释器的角色,在读取 shell 脚本之后,依序运行其中的 shell 命令,之后输出结果。利用 shell 脚本可以进行系统管理,文件操作等。
2) shell环境
java需要虚拟机解释器, 同理 shell脚本也需要解释器
Shell 编程跟 JavaScript、php 编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
查看解释器
cat /etc/shells
3) 编写第一个shell
打开文本编辑器(我们也可以使用 vi/vim 命令来创建文件),新建一个文件 czbk.sh,扩展名为 sh(sh代表shell):
#!/bin/bash --- 指定脚本解释器
echo "你好,传智播客 !"
//写shell的习惯 第一行指定解释器
//文件是sh为后缀名
//括号成对书写
//注释的时候尽量不用中文注释。不友好。
//[] 括号两端要要有空格。 [ neirong ]
//习惯代码索引,增加阅读性
//写语句的时候,尽量写全了,比如if。。。
1、创建sh文件**
vim czbk.sh
2、编写并保存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TqP5FDXv-1646139052959)(assets/1576839380199.png)]
3、查看czbk.sh文件
ls -l
如刚刚编写的czbk.sh文件的的权限是【-rw-rw-r–】,通过我们之前学过的知识,我们发现这个文件并没有执行的权限
我们需要将czbk.sh文件设置下它的执行权限【x】,如果不设置有执行权限,当前的文件不具备文件执行的能力。
通过chmod设置执行权限
chmod +x ./czbk.sh
下面,我们就开始执行czbk.sh
4、执行czbk.sh文件 — bash a.sh0
./czbk.sh
刚刚编写的shell在执行的时候正常打印出来了,说明czbk.sh具备执行的能力
注意:
#! 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo 命令用于向窗口输出文本。
4.3.2 shell注释
1、单行注释
以 # 开头的行就是注释,会被解释器忽略。
通过每一行加一个 # 号设置多行注释,如下:
#--------------------------------------------
# 这是一个注释
#--------------------------------------------
##### 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 结束 #####
每一行加个#符号太费力了,此时,我们可以通过EOF进行多行注释,如下:
2、多行注释
多行注释还可以使用以下格式:
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
':<<!
注释内容...
注释内容...
注释内容...
!
总结:
我们将在下面的小章节中使用注释,查看注释效果
4.3.3 shell变量
1、定义变量:
variable_name="czbk"
变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:
- 命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
- 中间不能有空格,可以使用下划线(_)。
- 不能使用标点符号。
- 不能使用bash里的关键字(可用help命令查看保留关键字)。
有效的 Shell 变量名示例如下:
RUNOOB
LD_LIBRARY_PATH
_var
var2
无效的变量命名:
?var=123
user*name=runoob
2、使用变量
使用一个定义过的变量,只要在变量名前面加美元符号即可,如:
variable_name="czbk"
echo $variable_name
echo ${variable_name}
变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:
echo "I am good at ${shell-t}Script"
通过上面的脚本我们发现,如果不给shell-t变量加花括号,写成echo "I am good at shell−tScript",解释器shell就会把shell-tScript",解释器shell就会把shell−tScript",解释器shell就会把shell-tScript当成一个变量,由于我们前面没有定义shell-t变量,那么解释器执行执行的结果自然就为空了。这里我们推荐给所有变量加上花括号,这也是一个好的编程习惯。
已定义的变量,可以被重新定义,如:
your_name="tom"
echo $your_name
your_name="frank"
echo $your_name
这样写是合法的,但注意,第二次赋值的时候不能写yourname="frank",使用变量的时候才加your_name="frank",使用变量的时候才加yourname="frank",使用变量的时候才加。
3、只读变量
这里的只读变量其实有点类似于我们在java se阶段课程中定义的final变量,即在程序的上下文中不允许被程序修改
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="https://www.baidu.com"
readonly myUrl
myUrl="https://cn.bing.com/"
4、删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
示例如下
#!/bin/sh
myUrl="https://www.baidu.com"
unset myUrl
echo $myUrl
如上面的shell脚本,我们定义了一个myUrl变量,通过unset删除这个变量,然后通过echo进行输出,结果是就是为空,没有任何的结果输出。
Shell 字符串
字符串是shell编程中最常用也是最有用的数据类型,字符串可以用单引号,也可以用双引号,也可以不用引号,正如我们开篇提到的,在Java SE中我们定义一个字符串可以通过Stirng stringStr=“abc" 双引号的形式进行定义,而在shel中也是可以的。
单引号
str='this is a string variable'
单引号字符串的限制:
- 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
- 单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
双引号
your_name='frank'
str="Hello, \"$your_name\"! \n"
echo -e $str
输出结果为:
双引号的优点:
- 双引号里可以有变量
- 双引号里可以出现转义字符
拼接字符串
your_name="frank"
# 使用双引号拼接
greeting="hello, "$your_name" !"
greeting_1="hello, ${your_name} !"
echo $greeting $greeting_1
获取字符串长度
string="czbk"
echo ${#string}
输出结果:4.表示长度为4
提取字符串
以下实例从字符串第 2 个字符开始截取 4 个字符:
string="abcdefghijklmn"
echo ${string:1:4}
输出为【bcde】,通过截取我们发现,它的下标和我们在java中的读取方式是一样的,下标也是从0开始。
4.3.4 shell数组
这里的数组和我们在Java SE阶段的数组结果(或是性质)是一样的,只是定义的过程大同小异
bash支持一维数组(不支持多维数组),并且没有限定数组的大小。
定义数组
在 Shell 中,用括号来表示数组,数组元素用"空格"符号分割开。如下:
数组名=(值1 值2 ... 值n)
例如:
array_name=(value0 value1 value2 value3)
或者
array_name=(
value0
value1
value2
value3
)
通过下标定义数组中的其中一个元素:
array_name[0]=value0
array_name[1]=value1
array_name[n]=valuen
可以不使用连续的下标,而且下标的范围没有限制。
读取数组
读取数组元素值的一般格式是:
${数组名[下标]}
例如:
valuen=${array_name[n]}
使用 @ 符号可以获取数组中的所有元素,例如:
echo ${array_name[@]}
获取数组的长度
获取数组长度的方法与获取字符串长度的方法相同,例如:
# 取得数组元素的个数
length=${#array_name[@]}
# 或者
length=${#array_name[*]}
下面,我们通过一个例子,定义数组、提取数组元素的例子来验证下
#! /bin/bash
g=(a b c d e f)
echo "数组下标为2的数据为:" ${g[2]}
echo "数组所有数据为:" ${#g[@]}
echo "数组所有数据为:" ${#g[*]}
4.3.5 shell运算符
Shell 和其他编程一样,支持包括:算术、关系、布尔、字符串等运算符。
原生 bash **不支持 **简单的数学运算,但是可以通过其他命令来实现,例如expr。
expr 是一款表达式计算工具,使用它能完成表达式的求值操作。
1、算数运算符
val=`expr 2 + 2`
echo "相加之后的结果为:" $val
注意:
表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2。
完整的表达式要被 ` 包含,注意不是单引号。
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 |
expr $a + $b 结果为 30。
|
- | 减法 |
expr $a - $b 结果为 -10。
|
* | 乘法 |
expr $a \* $b 结果为 200。
|
/ | 除法 |
expr $b / $a 结果为 2。
|
% | 取余 |
expr $b % $a 结果为 0。
|
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
**注意:**条件表达式要放在方括号之间,并且要有空格,例如: [a==a==a==b] 是错误的,必须写成 [ $a == $b ]。
下面是运算符shell脚本(还是采用之前的例子test-shell.sh )w
#! /bin/bash
#g=(a b c d e f)
#echo "数组下标为2的数据为:" ${g[2]}
#echo "数组所有数据为:" ${#g[@]}
#echo "数组所有数据为:" ${#g[*]}
:<<EOF
val= `expr 2 + 2`
echo "相加之后的结果为:" $val
EOFa=4
b=20
echo “加法运算” `expr $a + $b`
echo “减法运算” `expr $a - $b`
echo “乘法运算,注意*号前面需要反斜杠” ` expr $a \* $b`
echo “除法运算” `expr $b / $a`
((a++))
echo "a = $a"
c=$((a + b))
d=$[a + b]
echo "c = $c"
echo "d = $d"
上面的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 ):
a="abc"
b="efg"if [ $a = $b ]
thenecho "$a = $b : a 等于 b"
elseecho "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a != $b: a 等于 b"
fi
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 )
a=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
thenecho "$a -ne $b: a 不等于 b"
elseecho "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
thenecho "$a -gt $b: a 大于 b"
elseecho "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
thenecho "$a -lt $b: a 小于 b"
elseecho "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
thenecho "$a -ge $b: a 大于或等于 b"
elseecho "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
thenecho "$a -le $b: a 小于或等于 b"
elseecho "$a -le $b: a 大于 b"
fi
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。 |
5、逻辑运算符
假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的 AND | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
逻辑运算符实例如下(还是采用之前的例子test-shell.sh ):
a=10
b=20if [[ $a -lt 100 && $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fiif [[ $a -lt 100 || $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fi
4.3.6 shell流程控制
1、if 语句:
主要用于判断,相当于java se中的if,我们还是采用之前的例子test-shell.sh
if condition
thencommand1 command2...commandN
fi
注意
末尾的fi就是if倒过来拼写
2、if else 语句:
主要用于判断,相当于java se中的if else,我们还是采用之前的例子test-shell.sh。
3、if else-if else 语句:
4、for 循环
主要用于循环,相当于java se中的for循环,我们还是采用之前的例子test-shell.sh
for循环格式为
for var in item1 item2 ... itemN
docommand1command2...commandN
done
顺序输出当前列表中的字母:
for loop in A B C D E F G
doecho "顺序输出字母为: $loop"
done
5、while循环
主要用于循环,相当于java se中的while循环
while循环用于不断执行一系列命令,也用于从输入文件中读取数据
语法格式为
while condition
docommand
done
以下是一个基本的while循环,测试条件是:如果int小于等于10,那么条件返回真。int从0开始,每次循环处理时,int加1。
还是采用之前的例子test-shell.sh
#!/bin/bash
int=1
while(( $int<=10 ))
doecho "输出的值为:"$intlet "int++"
done
6、case … esac语句
主要用于分支条件选择,相当于java se中的switch case循环
case … esac 与其他语言中的 switch … case 语句类似,是一种多分枝选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。
case 后为取值,值可以为变量或常数。
值后为关键字 in,接下来是匹配的各种模式,每一模式最后必须以右括号结束,模式支持正则表达式。
下面通过v的值进行case–esac
v="czbk"case "$v" in"czbk") echo "传智播客";;"baidu") echo "baidu 搜索";;"google") echo "google 搜索";;
esac
4.3.7 shell函数
我们将要学习的shell函数,我们可以理解成在Java SE阶段我们学习的方法,它和shell函数的作用是一样的。
函数语法如下:
[ function ] funname [()]{action;[return int;]}
注意:
- 1、可以使用function fun() 定义函数,也可以直接fun() 定义,不带任何参数。
- 2、函数参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
下面我们将定义一个函数,并发生函数调用
还是采用之前的例子test-shell.sh
#!/bin/bashczbk(){echo "这是第一个函数!"
}
echo "-----这里是函数开始执行-----"
czbk
echo "-----这里是函数执行完毕-----"
定义一个带有return语句的函数:
function czbk(){echo "对输入的两个数字进行相加运算..."echo "输入第一个数字: "read aNumecho "输入第二个数字: "read anotherNumecho "两个数字分别为 $aNum 和 $anotherNum !"return $(($aNum+$anotherNum))
}
czbk
echo "输入的两个数字之和为 $? !"
注意:
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
Linux课堂笔记(2)相关推荐
- Linux课堂笔记-第二天
Shell简介 在Linux系统中,shell是最常用程序,作用侦听用户命令,启动命令所指定的进程并将结果返回给用户.他还是一种程序设计语言,是系统维护时的重要工具. 两部分组成,#为命令行提示符:# ...
- linux课堂笔记(7)
编译器:gcc 格式:gcc [参数] <源程序> gcc test.c 注:默认生成可执行程序a.out(windows默认test.exe) ./a.out gcc -o 可 ...
- linux课堂笔记(6)
设置文件访问权限: 1,通过字母设置:参数 == 字母 (1)用户类型: u 拥有者 g 同组用户 o 其他用户 a所有用户 (2)权限:r 读 w 写 x执行 注:目录权限: ...
- linux课堂笔记(4)
常用指令:mv 1,隐藏文件 (1)windows通过设置属性隐藏文件 attrib +h +s 文件 attrib +h +s d:\net.txt attrib +h +s d:\net ...
- linux课堂笔记(3)
1,linux厂商版本信息 内核信息:主版本.修正号.发行号.on 硬件平台. 主机名 登录 身份认证 localhost login:root password:隐藏口令 提示上一次登录时间与地 ...
- linux课堂笔记(8)
磁盘分区工具(parted) 1,语法: parted 磁盘 注:磁盘类型(根据接口划分) (1)IDE-hd,hda,hdc(光驱),hdd 加载光盘 mount /dev/cdrom mount ...
- linux课堂笔记(5)
vi编辑器 1,vi版本:vi -- vim ps:查看进程 进程 ID 时间 终端 进程名称 ps -t 终端(查看指定终端进程) vi 回车(提示vi版本信息) 2,vi特点 (1)支 ...
- Linux课堂笔记--第九天
替代 cd /media/OL6.4\ x86_64\ Disc\ 1\ 20130225/Packages/ Yuminstall oracle-rdbms-server-11gR2-preins ...
- 云端搭建Linux学习环境 【课堂笔记】
云端搭建Linux学习环境 [课堂笔记]: 教学文档地址:https://edu.aliyun.com/course/149?spm=a2c6h.14089369.J_2497364210.5.4cd ...
最新文章
- C语言成长学习题(十六)
- ZOJ Monthly, January 2013
- Putty通过ssh代理连接远程服务
- wave文件 fft_STM32F103 如何实现 FFT?
- [SpringSecurity]基本原理_过滤器链
- mysql 修改字段编码_mysql修改数据库编码字段编码
- string list 查找_手撕java集合源码——List篇
- 交换机tftp服务器修改ip,华为交换机tftp服务器地址
- jsp面试问题_JSP面试问答
- error: invalid new-expression of abstract class type 'Rectangle'
- 偏移出来的数据不准_关于AD7616采集后读回来数据不准(有偏移)的问题
- pandas - pd.date_range-生成时间索引
- [入门系列]什么是面向服务的体系结构(SOA)?
- 15.软件架构设计:大型网站技术架构与业务架构融合之道 --- 技术架构与业务架构的融合
- K - 迷宫问题 POJ - 3984(广度搜索)
- 二重积分计算(几何法)
- jz2440裸机开发与分析:S3c2440ARM异常与中断体系详解8---定时器中断程序示例
- oracle数据错误循环冗余检查,/S-Error: (OS 23) 数据错误(循环冗余检查)
- 逻辑回归(神经网络Sigmod激活函数,计量logit模型)
- javaweb基于SSM开发房屋租赁管理系统(房东 租客两种用户) 课程设计 大作业源码 毕业设计