Linux基础系列-Day9

算术运算符

设置变量a=10,b=4

+  加法

[[email protected]st ~]# echo $[$a+$b]
14

-  减法

[[email protected] ~]# echo $[$a-$b]
6

*  乘法

[[email protected] ~]# echo $[$a*$b]
40

/  除法,因为是整除,所以只等于2

[[email protected] ~]# echo $[$a/$b]
2

%  取余

[[email protected] ~]# echo $[$a%$b]
2

在脚本中可以使用expr调用

[[email protected] ~]# echo `expr $a + $b`
14
[[email protected] ~]# echo `expr $a - $b`
6
[[email protected] ~]# echo `expr $a \* $b`
40
[[email protected] ~]# echo `expr $a / $b`
2
[[email protected] ~]# echo `expr $a % $b`
2

赋值运算符

=  赋值,用于变量赋值

[[email protected] ~]# a=5
[[email protected] ~]# b=$a
[[email protected] ~]# echo $b
5

+=  变量经过加法运算后赋值

[[email protected] ~]# x=0
[[email protected] ~]# ((x+=5))
[[email protected] ~]# echo $x
5

*=  变量经过乘法法运算后赋值

[[email protected] ~]# x=5
[[email protected] ~]# ((x*=5))
[[email protected] ~]# echo $x
25

/=  变量经过除法法运算后赋值

[[email protected] ~]# x=5
[[email protected] ~]# ((x/=2))
[[email protected] ~]# echo $x
2

%=  变量经过取余运算后赋值

[[email protected] ~]# x=5
[[email protected] ~]# ((x%=2))
[[email protected] ~]# echo $x
1

字符串关系运算符

==  对比两个字符串是否相等,相等为真

[[email protected] ~]# a=abc
[[email protected] ~]# b=abc
[[email protected] ~]# [[ $a == $b ]]
[[email protected] ~]# echo $?      #  $?返回上一条命令执行状态,0为成立,即为真
0

!=  对比两个字符串是否不想等,不想等为真

[[email protected] ~]# a=abc
[[email protected] ~]# b=abb
[[email protected] ~]# [[ $a == $b ]]
[[email protected] ~]# echo $?
1
[[email protected] ~]# [[ $a != $b ]]
[[email protected] ~]# echo $?
0

整数关系运算符

格式:[ 整数 运算符 整数 ]

-eq  等于

[[email protected] ~]# [ 5 -eq 5 ]
[[email protected] ~]# echo $?
0

-gt  大于

[[email protected] ~]# [ 8 -gt 5 ]
[[email protected] ~]# echo $?
0

-lt  小于

[[email protected] ~]# [ 3 -lt 5 ]
[[email protected] ~]# echo $?
0

-ge  大于等于

[[email protected] ~]# [ 5 -ge 5 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 5 -ge 3 ]
[[email protected] ~]# echo $?
0

-le  小于等于

[[email protected] ~]# [ 3 -le 3 ]
[[email protected] ~]# echo $?
0
[[email protected] ~]# [ 3 -le 5 ]
[[email protected] ~]# echo $?
0

-ne  不等于

[[email protected] ~]# [ 3 -ne 5 ]
[[email protected] ~]# echo $?
0

文件的比较运算

-nt  (newer than)判断file1是否比file2新

[[email protected] ~]# [ abc.txt -nt aaa.txt ]
[[email protected] ~]# echo $?
1

-ot  (older than)判断file是否比file2旧

[[email protected] ~]# [ abc.txt -ot aaa.txt ]
[[email protected] ~]# echo $?
0

-ef  判断file1与file2是否为同一个文件,可用在判断hard link上

[[email protected] ~]# [ abc.txt -ef aaa.txt ]
[[email protected] ~]# echo $?
1

逻辑运算符

-a 或 && :逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假

[[email protected] ~]# a=3
[[email protected] ~]# b=6
[[email protected] ~]# [ $a -ne 6 ] && [ $b -gt 9 ]
[[email protected] ~]# echo $?    #因为a不等于6,b不大于9,所以左边成立,右边不成立,故总体是不成立的
1
[[email protected] ~]# [ $a -ne 6 ] && [ $b -gt 4 ]
[[email protected] ~]# echo $?    #因为a不等于6,b大于4,左右都是成立的,故总体成立
0[[email protected] ~]# [ $a -ne 6 -a $b -gt 4 ][[email protected] ~]# echo $?0

-o 或 || : 逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否为为假

[[email protected] ~]# a=3
[[email protected] ~]# b=6
[[email protected] ~]# [ $a -ne 6 ] || [ $b -gt 9 ]
[[email protected] ~]# echo $?    #因为左边a不等于6成立,故整体成立
0
[[email protected] ~]# [ $a -ne 3 ] || [ $b -gt 4 ]
[[email protected] ~]# echo $?    #因为右边b大于4成立,故整体成立
0
[[email protected] ~]# [ $a -ne 3 ] || [ $b -gt 9 ]
[[email protected] ~]# echo $?    #因为左右两边都不成立,故整体不成立
1

! :逻辑否,当制定条件不成立时,返回结果为真

[[email protected] ~]# [ ! $a -ne 3 ] || [ $b -gt 9 ]
[[email protected] ~]# echo $?    #因为左边a等于3,经过-ne判断为假,又经过!否定了假,所以为真成立
0

test测试操作

test可以用[]代替,如test -e abc.txt可以写成 [ -e abc.txt ]

文件类型判断

-e  该文件名是否存在

-f  该文件名是否存在且为file

-d  该文件名是否存在且为目录

-b  该文件名是否存在且为一个block

-c  该文件名是否存在且为一个character device设备

-S  该文件名是否存在且为一个socket文件

-p  该文件名是否存在且为一个FIFO(pipe)文件

-L  该文件名是否存在且为一个连接文件

示例:

[[email protected] ~]# touch abc.txt
[[email protected] ~]# test -e abc.txt
[[email protected] ~]# echo $?
0
[[email protected] ~]# test -e asdfg.txt
[[email protected] ~]# echo $?
1
[[email protected] ~]# test -f abc.txt
[[email protected] ~]# echo $?
0

文件权限检测

-r  检测文件名是否存在且具有“可读”权限

-w  检测文件名是否存在且具有“可写”权限

-x  检测文件名是否存在且具有“可执行”权限

-u  检测文件名是否存在且具有“SUID”权限

-g  检测文件名是否存在且具有“SGID”权限

-k  检测文件名是否存在且具有“Sticky bit”权限

-s  检测文件名是否存在且为“非空白文件”

示例:

[[email protected] ~]# test -r abc.txt
[[email protected] ~]# echo $?
0
[[email protected] ~]# test -x abc.txt
[[email protected] ~]# echo $?
1

字符串数据判断

-z  判断字符串是否为0,若为空返回true(0)

[[email protected] ~]# test -z "abc"
[[email protected] ~]# echo $?
1

-n  判断字符串是否为0,若为空返回false(0)

[[email protected] ~]# test -n "abc"
[[email protected] ~]# echo $?
0

流程控制

if单分支:当“条件成立”时执行相应的操作。

if 条件测试操作
then
  命令序列
fi

示例:当100大于80时,输出True

if [ 100 -gt 80 ];
then
    echo "True"
fi

if双分枝:当“条件成立”、“条件不成立”时执行不同操作。

if 条件测试命令
then
    命令序列1
else
    命令序列2
fi

示例:当检查到存在abc.txt,输出True,否则输出False

#!/bin/bash
if [ -e abc.txt ];
then
    echo "True"
else
    echo "False"
fi

if多分枝:相当于if语句嵌套,针对多个条件执行不同操作。

if 条件测试命令1; then
    命令序列1
elif 条件测试命令2;then
    命令序列2
elif ...
else
    命令序列n
fi

for循环:根据标量的不同取值,重复执行一组命令操作。

for 变量名 in 取值列表
do
    命令序列
done

示例1:依次打印数字1到5

#!/bin/bash
for x in [1..5]
do
    echo number $x
done 

while条件循环:重复测试指令的条件,只要条件为真则反复执行对应的命令操作,直到条件为假。如果使用true作为循环条件能够产生无限循环。

while 命令表达式
do
    命令列表
done

示例:批量添加20个系统账户用户名依次为user1~20

#!/bin/bash
i=1
while [ $i -le 20 ]
do
    useradd user$1
    echo "123456" | passwd --stdin user$i &> /dev/null
    i=`expr $i + 1`
done
时间: 2024-08-28 00:17:30

Linux基础系列-Day9的相关文章

03.风哥Oracle数据库入门必备Linux基础系列视频教程(Oracle零基础教程)

03.风哥Oracle数据库入门必备Linux基础系列视频教程(Oracle零基础教程)链接:https://pan.baidu.com/s/19C4vzPKq8EwKtJublmIB3w 提取码:lez8 请分享链接到5个QQ IT交流群后,加入以下QQ群找群主获取更多免费视频. 更多视频教程,请加入QQ群(只加一个即可):189070296336282998 原文地址:http://blog.51cto.com/oracle18c/2314272

Linux基础系列(1)

Linux基础      首先说一下Linux哲学思想        1 一切皆文件        2 小而美的应用程序        3 组合小程序        4 避免令人困惑的图形界面        5 配置数据储存在文本中    然后说一下shell,Shell是用户与Linux操作系统沟通的桥梁  Linux shell类型储存在/etc/shells文件中,cat查看一下.     [[email protected] ~]# cat /etc/shells     /bin/sh

Linux基础系列-Day2

基础命令(文件内容管理) 1.cat:在当前终端显示文本文件内容 格式:cat [文件路径] -n 从1开始对所有输出的行数编号 -b 和-n相似,只不过对于空白行不编号:2.head:从文件内容开头输出,默认头部10行 格式:head [文件路径] -c N 输出文件头部的N(N为整数)个字节内容 -n N 输出文件头部的N(N为整数)行的内容 3.tail:从文件尾部内容输出,默认尾部10行 格式:tail [文件路径] -c N 输出文件尾部的N(N为整数)个字节内容 -n N 输出文件的

Linux基础系列(三)Linux系统文件和目录重要知识

详细解释图: 第一列 Inode详解 第二列 文件类型及权限 第三列 硬链接数 第四五列 属主及所归属得组 第六列 文件或目录的大小 第七八九列 最近修改时间 第十列 文件或目录名字 inode详解 block是用来存储实际数据 inode用来存储文件属性 inode不包含文件名 文件在上一级目录的block里 block小结 磁盘读取数据是按Block为单位读取的. 一个文件可能占用多个Block.每读取一个Block就会消耗一次磁盘I/O. 如果要提升磁盘I/O性能,那么就要尽可能一次性读取

Linux基础系列-Day6

Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之间的文件共享. SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务. 服务安装 [[email protected] ~]# yum install samba -y 启动服务

Linux基础系列-Day5

网络管理 ifconfig网络管理工具 ifconfig依赖于命令中使用一些选项属性,不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是通过ifconfig修改的通常为临时配置,即系统重启后失效. 命令格式: ifconfig [选项] [参数] 注:ifconfig后不跟任何选项和参数,表示查询当前生效的网卡信息 常用选项: <device> up 启动指定网络设备或网卡. 注:可使用ifup代替 <device> down 关闭指定网络设备或网卡. 注:可使用i

Linux基础系列之--Linux基础入门

1.Linux相关的开源协定有: GPL:General Public License(通用公共许可证) LGPL GPLv2 BSD: Apache (1).GPL: DPL是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译.它并非由自由软件基金会所发表,亦非使用GNU通用公共授权的软件的法定发布条款─只有GNU通用公共授权英文原文的版本始具有此等效力. 详细信息参见链接:https://baike.baidu.com/item/GPL/2357

Linux基础系列之---Linux的常见发行版

Linux的常见发行版有几大分支: Linux发行版有数百种之多,我们只列举常见的几种发行版有:RedHat.Debian.Slackware.Gentoo等几大分支,除介绍的几大分支外,还有基于以上分支的二次发行版,如:基于RedHat的二次发行版CentOS.基于Debian的二次发行版Ubutu.knopix等.还有基于二次发行版再此封装发行的版本,如基于Ubutu发行的mint等. 1.RedHat分支 Redhat 9.0(个人版.9.0后交给了Fedora进行维护) RedHat E

Linux基础系列-Day7

NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样. 安装服务 [[email protected] ~]# yum install nfs-utils rpcbind -y 服务配置 NFS服务安装后,并没有任何共享配置,需要自己新建一个目录进行共享 [[email protected] ~]# e