admin 管理员组文章数量: 887021
- 1.文件管理
- touch命令
- 2.vi与vim命令
- 2.1vi
- 2.2vim
- vi/vim模式
- 打开和新建文件
- 文件查看
- cat
- grep命令
- tail命令
- less命令
- vim定位行
- 异常处理
- 3.echo命令
- 4.awk命令
- 5软连接
- 6.find查找
- 7.read命令
- 8.Linux备份压缩
- gzip命令
- gunzip命令
- tar命令
- zip命令
- unzip命令
- bzip2命令
- bunzip2命令
- 9.网络与磁盘管理
- 网络与磁盘管理
- ping命令
- netstat命令
- 磁盘命令
- lsblk命令
- df命令
- mount命令
- 10.shell与安装
- yum使用
- tree
- 安装tree
- 执行tree
- 移除tree
- yum查找
- yum源
- rpm使用
- 11.shell
- shell使用
- shell注释
- shell变量
- shell字符串
- shell数组
- 4.3.5 shell运算符
- 4.3.6 shell流程控制
- shell函数
1.文件管理
touch命令
使用touch创建一个空文件
使用 touch 创建批量空文件
stat以文字的格式来显示inode的内容
2.vi与vim命令
使用vi/vim其实就相当于我们在Windows系统中创建文件、打开文件、编辑文件、保存文件操作
2.1vi
vi的特点
- 只能是编辑 文本内容, 不能对 字体 段落进行排版
- 不支持鼠标操作
- 没有菜单
- 只有命令
2.2vim
是从 vi (系统内置命令)发展出来的一个文本编辑器
vi/vim模式
vi/vim模式主要分为以下三种:
命令模式:在Linux终端中输入“vim 文件名”就进入了命令模式,但不能输入文字。
编辑模式:在命令模式下按i就会进入编辑模式,此时就可以写入程式,按Esc可回到命令模式。
末行模式:在命令模式下按:进入末行模式,左下角会有一个冒号出现,此时可以敲入命令并执行。
打开和新建文件
vim a.txt
如果存在,则打开
如果不存在,则新建然后打开(存在的前提是最后保存了)
文件查看
序号 | 命令 | 对应英文 | 作用 |
---|---|---|---|
01 | cat 文件名 | concatenate | 查看小文件内容 |
02 | less -N 文件名 | less | 分频 显示大文件内容 |
03 | head -n 文件名 | 查看文件的前一部分 | |
04 | tail -n 文件名 | 查看文件的最后部分 | |
05 | grep 关键字 文件名 | grep | 根据关键词, 搜索文本文件内容 |
通过 cat
会一次显示所有的内容, 适合 查看内容较少 的文本文件
less
命令适合查看 内容较多 的文本文件
通过 head
命令查看文档的前几行内容
通过 tail -10f 文件
命令 查看文档(日志)的后几行内容
通过 grep
命令 搜索存在 关键字 的行
cat
grep命令
1.搜索存在关键字“美”的行的文件
2.搜索关键字"美"的行且显示行号
3、忽略大小写 搜索 存在关键字 的行
grep -i EEEE a.txt
4.搜索不存在关键字的行
5、查找指定的进程信息(包含grep进程)
6、查找指定的进程信息(不包含grep进程)
7、查找进程个数
tail命令
tail [参数] [文件]
1.显示 a.txt 文件的最后 3 行
2.动态显示文档的最后内容,一般用来查看日志
此命令显示 a.txt 文件的最后 10 行。当将某些行添加至 a.txt 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。
显示最后4行
3.显示内容,从第二行至末尾
4.显示最后10个字符
less命令
less [参数] 文件
less命令也是查看文件的,只不过它适合查看 内容较多的文本文件,它也可以用于分屏显示文件内容, 每次只显示一页内容,有点类似我们做分页查询
1.查看文件
2、查看命令历史使用记录并通过less分页显示
输入【j】可以前进行
输入【k】可以后退行
输入【G】可以 移动到最后一行
输入【g】可以移动到第一行
输入【ctrl + F】 向前移动一屏(类似于我们在浏览器中的数据分页的下一页)
输入【ctrl + B】 向后移动一屏(类似于我们在浏览器中的数据分页的上一页)
vim定位行
打开文件定位到第6行
异常处理
- 如果 vim异常退出, 在磁盘上可能会保存有 交换文件
- 下次再使用 vim 编辑文件时, 会看到以下屏幕信息,
解决方案:
将后缀名为.swp的文件删除即可恢复
再次编辑文件不在出现提示警告!
3.echo命令
echo string
将字符串输出到控制台 , 通常和 重定向 联合使用
- 默认情况下 命令的结果 输出到 控制台
- 通过 重定向 可以将结果 输出到文件
重定向 >
(覆盖) 和 >>
(追加) **实现
- 第一步: 将命令的成功结果 覆盖 指定文件内容**
echo 传智博客 >czbk-txt.txt
执行结果如下(czbk-txt.txt文件如果没有会自动创建)
命令 | 作用 |
---|---|
结果 > 文件名 | > 表示输出, 会覆盖文件的原有内容 |
- 第二步: 将命令的成功结果 追加 指定文件的后面
echo 黑马程序员 >> czbk-txt.txt
执行结果如下
命令 | 作用 |
---|---|
命令 >> 文件名 | >> 表示追加, 会将内容追加到已有文件的末尾 |
- 第三步: 将命令的失败结果 追加 指定文件的后面
cat 不存在的目录 &>> error.log
执行效果如下
命令 | 作用 |
---|---|
命令 &>> 文件 | &>> 表示不区分错误类型 都放到 日志中 |
总结
- 通过
命令 > 文件
将命令的成功结果 覆盖 指定文件内容- 通过
命令 >> 文件
将命令的成功结果 追加 指定文件的后面- 通过
命令 &>> 文件
将 命令的失败结果 追加 指定文件的后面
4.awk命令
具体语法如下
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
1、数据准备:czbk-txt.txt文本内容如下:
2、搜索含有 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 czbk-txt.txt | awk -F ' ' '{print $1,$2,$3}'
选项
选项 | 英文 | 含义 |
---|---|---|
OFS="字符" | output field separator | 向外输出时的段分割字符串 |
转义序列 | 含义 |
---|---|
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 制表符 |
# 按照 === 进行分割, 打印 第一段 第二段 第三段
cat czbk-txt.txt | awk -F ' ' '{OFS="==="}{print $1,$2,$3}'
# 按照 制表符tab 进行分割, 打印 第一段 第二段 第三段
cat czbk-txt.txt| awk -F ' ' '{OFS="\t"}{print $1,$2,$3}'
调用 awk 提供的函数
命令 | 含义 |
---|---|
awk -F ‘,’ ‘{print toupper($2)}’ 1.txt | 操作1.txt文件, 根据 逗号 分割, 打印 第一段 第二段 第三段 内容 |
常用函数如下:
函数名 | 含义 | 作用 |
---|---|---|
toupper() | upper | 字符 转成 大写 |
tolower() | lower | 字符 转成小写 |
length() | length | 返回 字符长度 |
# 打印第一段内容
cat czbk-txt.txt | awk -F ' ' '{print $1}'
# 将第一段内容转成大写 且 显示
cat czbk-txt.txt | awk -F ' ' '{print toupper($1)}'
求指定学科平均分
命令 | 含义 |
---|---|
awk ‘BEGIN{初始化操作}{每行都执行} END{结束时操作}’ 文件名 | BEGIN{ 这里面放的是执行前的语句 } {这里面放的是处理每一行时要执行的语句} END {这里面放的是处理完所有的行后要执行的语句 } |
查看czbk-txt.txt 文件内容
查看总分
注意:这里计算的是第4列的总分
查看总分, 总人数
注意:这里计算的是第4列的
查看总分, 总人数, 平均分
注意:这里计算的是第4列的
5软连接
软连接其实就类似于我们在Windows中的【快捷方式】
语法如下:
命令 | 英文 | 作用 |
---|---|---|
ln -s 目标文件绝对路径 快捷方式路径 | link | 给目标文件增加一个软链接, 通俗讲就是快捷方式 |
给home/itcast/txtfile.txt文件增加软连接
6.find查找
语法
find <指定目录> <指定条件> <指定内容>
1、将目前目录及其子目录下所有延伸档名是 gz 的文件查询出来
find . -name "*.gz"
2、将目前目录及其子目录下所有最近 1天内更新过的文件查询出来
find . -ctime -1
3、全局搜索czbk
find / -name 'czbk'
7.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 #退出
2、读取文件
每次调用 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中
do
echo "Line $count:$line"
count=$[ $count + 1 ] # 注意中括号中的空格。
done
echo "finish"
exit 0
执行效果如下
8.Linux备份压缩
gzip命令
语法
gzip[参数][文件或者目录]
1、压缩目录下的所有文件
gzip *
2、 列出详细的信息
解压文件并列出详细信息
gzip -dv *
gunzip命令
gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件
语法
gunzip[参数][文件或者目录]
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
执行效果如下
3、查看tar中有哪些文件
tar -ztvf txt.tar.gz
执行效果如下
4、将tar 包解压缩
1.新建目录
mkdir ysFiles
2.复制
cp txt.tar.gz ./ysFiles/
3.解压缩
tar -zxvf /home/itcast/ysFiles/txt.tar.gz
解压后的文件如下
zip命令
zip命令用于压缩文件。
unzip命令
Linux unzip命令用于解压缩zip文件
unzip为.zip压缩文件的解压缩程序
1、查看压缩文件中包含的文件:
2、如果要把文件解压到指定的目录下,需要用到-d参数
bzip2命令
bzip2命令是.bz2文件的压缩程序。
bzip2采用新的压缩演算法,压缩效果比传统的LZ77/LZ78压缩演算法来得好。若没有加上任何参数,bzip2压缩完文件后会产生.bz2的压缩文件,并删除原始的文件。
1、压缩文件
bunzip2命令
Linux bunzip2命令是.bz2文件的解压缩程序。
9.网络与磁盘管理
网络与磁盘管理
1、显示激活的网卡信息
2、关闭网卡(需要切换到管理员账户)
3、启用网卡(需要切换到管理员账户)
4、配置ip信息
// 配置ip地址
ifconfig ens37 192.168.23.199
// 配置ip地址和子网掩码
ifconfig ens37 192.168.23.133 netmask 255.255.255.0
ping命令
ping命令用于检测主机。
执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
icmp_seq:ping序列,从1开始
ttl:IP生存时间值
time: 响应时间,数值越小,联通速度越快
2、指定接收包的次数
netstat命令
netstat命令用于显示网络状态。
1、显示详细的连接状况
比如上面的【0 0.0.0.0:ssh】它是远程终端连接Linux的ssh服务,默认使用了22端口,它的状态【State】是处于监听状态,属于正常。
2、显示网卡列表
上图显示的是我们在介绍【ifconfig】命令的时候看到的网卡信息
磁盘命令
lsblk命令
1、lsblk命令默认情况下将以树状列出所有块设备:
2、默认选项不会列出所有空设备:
df命令
Linux的df命令类似于在Windows中的【计算机】–【管理】–【磁盘管理】菜单对磁盘的统计情况查看
1、显示磁盘使用情况统计情况
2、df命令也可以显示磁盘使用的文件系统信息
比如我们df下之前创建过的目录gzipTest的使用情况
3、df显示所有的信息
4、df换算后显示
mount命令
用于挂载Linux系统外的文件
挂载概念
在安装linux系统时设立的各个分区,如根分区、/boot分区等都是自动挂载的,也就是说不需要我们人为操作,开机就会自动挂载。但是光盘、u盘等存储设备如果需要使用,就必须人为的进行挂载。
其实我们在windows下插入U盘也是需要挂载(分配盘符)的,只不过windows下分配盘符是自动的
Linux中的根目录以外的文件要想被访问,需要将其“关联”到根目录下的某个目录来实现,这种关联操作就是“挂载”,这个目录就是“挂载点”,解除次关联关系的过程称之为“卸载”。
注意:“挂载点”的目录需要以下几个要求:
(1)目录事先存在,可以用mkdir命令新建目录;
(2)挂载点目录不可被其他进程使用到;
(3)挂载点下原有文件将被隐藏。
创建挂载点
注意:一般用户无法挂载cdrom,只有root用户才可以操作
我们切换到root下创建一个挂载点(其实就是创建一个目录)
mkdir -p mnt/cdrom
开始挂载
通过挂载点的方式查看上面的【ISO文件内容】
mount -t auto /dev/cdrom /mnt/cdrom
执行效果如下
查看挂载点内容
ls -l -a ./mnt/cdrom/
卸载cdrom
umount ./mnt/cdrom/
10.shell与安装
yum使用
yum类似于开发工具idea、eclipse中的在线插件安装商店
我们输入一个将要安装的插件名字,进行搜索、安装的过程。
语法
yum [options] [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
tree
安装tree
yum -y install tree //y当安装过程提示选择全部为"yes"
执行tree
移除tree
yum查找
利用 yum 的功能,找出以 tom 为开头的软件名称有哪些
yum源
概述
yum需要一个yum库,也就是yum源。
简单的说,我们安装软件的时候需要下载软件,将很多软件放在一起就是源。软件安装包的来源,所以yum源就是软件安装包来源
安装阿里yum源
因为默认的yum源服务器在国外,我们在安装软件的时候会受到速度的影响,所以安装国内yum源在下载的时候速度、稳定性会比国外的好很多。
1) 安装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/repo/Centos-7.repo
查看下载的阿里云的Centos-6.repo文件
4) 重新加载yum
清理之前(CentOS)的缓存
把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度。
5、验证yum源使用
rpm使用
1、rpm介绍
rpm(redhat package manager) 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项套件的程序,由于它遵循 GPL 规则且功能强大方便,因而广受欢迎。逐渐受到其他发行版的采用。RPM 套件管理方式的出现,让 Linux 易于安装,升级,间接提升了 Linux 的适用度。
2、rpm与yum区别
rpm 只能安装已经下载到本地机器上的rpm 包. yum能在线下载并安装rpm包,能更新系统,且还能自动处理包与包之间的依赖问题,这个是rpm 工具所不具备的。
语法如下:
用法: rpm [选项...]
安装rpm软件包
rpm -ivh 软件全包名
卸载rpm软件包
rpm -e 软件全包名
列出所有安装过的包
rpm -qa
查询软件包信息
rpm -qi 软件全包名
查看文件安装位置
rpm -ql 软件全包名
11.shell
shell使用
1.什么是shell
Shell 脚本(shell script),是一种为 shell 编写的脚本程序。
Shell 脚本(Shell Script)又称 Shell 命令稿、程序化脚本,是一种计算机程序使用的文本文件,内容由一连串的 shell 命令组成,经由 Unix Shell 直译其内容后运作
2.shell环境
3.编写第一个shell
#!/bin/bash --- 指定脚本解释器
echo "你好,传智播客 !"
我们需要将czbk.sh文件设置下它的执行权限【x】,如果不设置有执行权限,当前的文件不具备文件执行的能力
4、执行czbk.sh文件 — bash a.sh0
shell注释
1、单行注释
以 # 开头的行就是注释,会被解释器忽略。
#--------------------------------------------
# 这是一个注释
#--------------------------------------------
##### 开始 #####
#
#
# 这里可以添加脚本描述信息
#
#
##### 结束 #####
2、多行注释
:<<EOF
注释内容...
注释内容...
注释内容...
EOF
EOF 也可以使用其他符号:
:<<'
注释内容...
注释内容...
注释内容...
'
:<<!
注释内容...
注释内容...
注释内容...
!
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 s h e l l − t S c r i p t " ,解释器 s h e l l 就会把 shell-tScript",解释器shell就会把 shell−tScript",解释器shell就会把shell-tScript当成一个变量,由于我们前面没有定义shell-t变量,那么解释器执行执行的结果自然就为空了。这里我们推荐给所有变量加上花括号,这也是一个好的编程习惯。
已定义的变量,可以被重新定义,如:
your_name="tom"
echo $your_name
your_name="frank"
echo $your_name
执行效果如下图
这样写是合法的,但注意,第二次赋值的时候不能写 y o u r n a m e = " f r a n k " ,使用变量的时候才加 your_name="frank",使用变量的时候才加 yourname="frank",使用变量的时候才加。
3、只读变量
这里的只读变量其实有点类似于我们在java se阶段课程中定义的final变量,即在程序的上下文中不允许被程序修改
使用 readonly 命令可以将变量定义为只读变量,只读变量的值不能被改变。
下面的例子尝试更改只读变量,结果报错:
#!/bin/bash
myUrl="https://www.baidu"
readonly myUrl
myUrl="https://cn.bing/"
执行效果如下图
4、删除变量
使用 unset 命令可以删除变量。语法:
unset variable_name
变量被删除后不能再次使用。unset 命令不能删除只读变量。
示例如下
#!/bin/sh
myUrl="https://www.baidu"
unset myUrl
echo $myUrl
执行效果如下图
如上面的shell脚本,我们定义了一个myUrl变量,通过unset删除这个变量,然后通过echo进行输出,结果是就是为空,没有任何的结果输出。
shell字符串
单引号
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}
提取字符串
string="abcdefghijklmn"
echo ${string:1:4}
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)![在这里插入图片描述](https://img-blog.csdnimg/e15b59e19b48430fab9bea691e3167d1.png)
echo "数组下标为2的数据为:" ${g[2]}
echo "数组所有数据为:" ${#g[@]}
echo "数组所有数据为:" ${#g[*]}
4.3.5 shell运算符
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 ]。
#! /bin/bash
#g=(a b c d e f)
#echo "数组下标为2的数据为:" ${g[2]}
#echo "数组所有数据为:" ${#g[@]}
#echo "数组所有数据为:" ${#g[*]}
:<<EOF
val= `expr 2 + 2`
echo "相加之后的结果为:" $val
EOF
a=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"
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 ]
then
echo "$a = $b : a 等于 b"
else
echo "$a = $b: a 不等于 b"
fi
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$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=20
if [ $a -eq $b ]
then
echo "$a -eq $b : a 等于 b"
else
echo "$a -eq $b: a 不等于 b"
fi
if [ $a -ne $b ]
then
echo "$a -ne $b: a 不等于 b"
else
echo "$a -ne $b : a 等于 b"
fi
if [ $a -gt $b ]
then
echo "$a -gt $b: a 大于 b"
else
echo "$a -gt $b: a 不大于 b"
fi
if [ $a -lt $b ]
then
echo "$a -lt $b: a 小于 b"
else
echo "$a -lt $b: a 不小于 b"
fi
if [ $a -ge $b ]
then
echo "$a -ge $b: a 大于或等于 b"
else
echo "$a -ge $b: a 小于 b"
fi
if [ $a -le $b ]
then
echo "$a -le $b: a 小于或等于 b"
else
echo "$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。 |
布尔运算符实例如下(还是采用之前的例子test-shell.sh ):
a=10
b=20
if [ $a != $b ]
then
echo "$a != $b : a 不等于 b"
else
echo "$a == $b: a 等于 b"
fi
if [ $a -lt 100 -a $b -gt 15 ]
then
echo "$a 小于 100 且 $b 大于 15 : 返回 true"
else
echo "$a 小于 100 且 $b 大于 15 : 返回 false"
fi
if [ $a -lt 100 -o $b -gt 100 ]
then
echo "$a 小于 100 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 100 或 $b 大于 100 : 返回 false"
fi
if [ $a -lt 5 -o $b -gt 100 ]
then
echo "$a 小于 5 或 $b 大于 100 : 返回 true"
else
echo "$a 小于 5 或 $b 大于 100 : 返回 false"
fi
执行效果如下
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=20
if [[ $a -lt 100 && $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
if [[ $a -lt 100 || $b -gt 100 ]]
then
echo "返回 true"
else
echo "返回 false"
fi
执行效果如下
4.3.6 shell流程控制
1、if 语句:
if condition
then
command1
command2
...
commandN
fi
if [ $(ps -ef | grep -c "ssh") -gt 1 ]; then echo "true"; fi
结果为ture
2、if else 语句:
if condition
then
command1
command2
...
commandN
else
command
fi
if [ $(ps -ef | grep -c "sshAAA") -gt 1 ]; then echo "true"; else echo "false"; fi
结果为false
3、if else-if else 语句:
if condition1
then
command1
elif condition2
then
command2
else
commandN
fi
a=10
b=20
if [ $a == $b ]
then
echo "a 等于 b"
elif [ $a -gt $b ]
then
echo "a 大于 b"
elif [ $a -lt $b ]
then
echo "a 小于 b"
else
echo "没有符合的条件"
fi
结果为 a 小与 b
4、for 循环
for var in item1 item2 ... itemN
do
command1
command2
...
commandN
done
for loop in A B C D E F G
do
echo "顺序输出字母为: $loop"
done
5、while循环
while condition
do
command
done
#!/bin/bash
int=1
while(( $int<=10 ))
do
echo "输出的值为:"$int
let "int++"
done
6、case … esac语句
case 值 in
模式1)
command1
command2
command3
;;
模式2)
command1
command2
command3
;;
*)
command1
command2
command3
;;
esac
v="czbk"
case "$v" in
"czbk") echo "传智播客"
;;
"baidu") echo "baidu 搜索"
;;
"google") echo "google 搜索"
;;
esac
shell函数
可以理解成在Java SE阶段学习的方法,它和shell函数的作用是一样的。
函数语法如下:
[ function ] funname [()]
{
action;
[return int;]
}
注意:
- 1、可以使用function fun() 定义函数,也可以直接fun() 定义,不带任何参数。
- 2、函数参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255
#!/bin/bash
czbk(){
echo "这是第一个函数!"
}
echo "-----这里是函数开始执行-----"
czbk
echo "-----这里是函数执行完毕-----"
带有return语句的函数
function czbk(){
echo "对输入的两个数字进行相加运算..."
echo "输入第一个数字: "
read aNum
echo "输入第二个数字: "
read anotherNum
echo "两个数字分别为 $aNum 和 $anotherNum !"
return $(($aNum+$anotherNum))
}
czbk
echo "输入的两个数字之和为 $? !"
注意:
函数返回值在调用该函数后通过 $? 来获得。
注意:所有函数在使用前必须定义。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。调用函数仅使用其函数名即可。
版权声明:本文标题:Linu x相关知识2 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1724514275h753997.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论