Linux基础系列-Day9
算术运算符
设置变量a=10,b=4
+ 加法
[root@localhost ~]# echo $[$a+$b]
14
- 减法
[root@localhost ~]# echo $[$a-$b]
6
* 乘法
[root@localhost ~]# echo $[$a*$b]
40
/ 除法,因为是整除,所以只等于2
[root@localhost ~]# echo $[$a/$b]
2
% 取余
[root@localhost ~]# echo $[$a%$b]
2
在脚本中可以使用expr调用
[root@localhost ~]# echo `expr $a + $b`
14
[root@localhost ~]# echo `expr $a - $b`
6
[root@localhost ~]# echo `expr $a \* $b`
40
[root@localhost ~]# echo `expr $a / $b`
2
[root@localhost ~]# echo `expr $a % $b`
2
赋值运算符
= 赋值,用于变量赋值
[root@localhost ~]# a=5
[root@localhost ~]# b=$a
[root@localhost ~]# echo $b
5
+= 变量经过加法运算后赋值
[root@localhost ~]# x=0
[root@localhost ~]# ((x+=5))
[root@localhost ~]# echo $x
5
*= 变量经过乘法法运算后赋值
[root@localhost ~]# x=5
[root@localhost ~]# ((x*=5))
[root@localhost ~]# echo $x
25
/= 变量经过除法法运算后赋值
[root@localhost ~]# x=5
[root@localhost ~]# ((x/=2))
[root@localhost ~]# echo $x
2
%= 变量经过取余运算后赋值
[root@localhost ~]# x=5
[root@localhost ~]# ((x%=2))
[root@localhost ~]# echo $x
1
字符串关系运算符
== 对比两个字符串是否相等,相等为真
[root@localhost ~]# a=abc
[root@localhost ~]# b=abc
[root@localhost ~]# [[ $a == $b ]]
[root@localhost ~]# echo $? # $?返回上一条命令执行状态,0为成立,即为真
!= 对比两个字符串是否不想等,不想等为真
[root@localhost ~]# a=abc
[root@localhost ~]# b=abb
[root@localhost ~]# [[ $a == $b ]]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [[ $a != $b ]]
[root@localhost ~]# echo $?
0
整数关系运算符
格式:[ 整数 运算符 整数 ]
-eq 等于
[root@localhost ~]# [ 5 -eq 5 ]
[root@localhost ~]# echo $?
0
-gt 大于
[root@localhost ~]# [ 8 -gt 5 ]
[root@localhost ~]# echo $?
0
-lt 小于
[root@localhost ~]# [ 3 -lt 5 ]
[root@localhost ~]# echo $?
0
-ge 大于等于
[root@localhost ~]# [ 5 -ge 5 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 5 -ge 3 ]
[root@localhost ~]# echo $?
0
-le 小于等于
[root@localhost ~]# [ 3 -le 3 ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ 3 -le 5 ]
[root@localhost ~]# echo $?
0
-ne 不等于
[root@localhost ~]# [ 3 -ne 5 ]
[root@localhost ~]# echo $?
0
文件的比较运算
-nt (newer than)判断file1是否比file2新
[root@localhost ~]# [ abc.txt -nt aaa.txt ]
[root@localhost ~]# echo $?
1
-ot (older than)判断file是否比file2旧
[root@localhost ~]# [ abc.txt -ot aaa.txt ]
[root@localhost ~]# echo $?
0
-ef 判断file1与file2是否为同一个文件,可用在判断hard link上
[root@localhost ~]# [ abc.txt -ef aaa.txt ]
[root@localhost ~]# echo $?
1
逻辑运算符
-a 或 && :逻辑与,“而且”的意思,前后两个表达式都成立时整个测试结果才为真,否则为假
[root@localhost ~]# a=3
[root@localhost ~]# b=6
[root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 9 ]
[root@localhost ~]# echo $? #因为a不等于6,b不大于9,所以左边成立,右边不成立,故总体是不成立的
1
[root@localhost ~]# [ $a -ne 6 ] && [ $b -gt 4 ]
[root@localhost ~]# echo $? #因为a不等于6,b大于4,左右都是成立的,故总体成立
0
[root@localhost ~]# [ $a -ne 6 -a $b -gt 4 ]
[root@localhost ~]# echo $?
0
-o 或 || : 逻辑或,“或者”的意思,操作符两边至少一个为真时,结果为真,否为为假
[root@localhost ~]# a=3
[root@localhost ~]# b=6
[root@localhost ~]# [ $a -ne 6 ] || [ $b -gt 9 ]
[root@localhost ~]# echo $? #因为左边a不等于6成立,故整体成立
0
[root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 4 ]
[root@localhost ~]# echo $? #因为右边b大于4成立,故整体成立
0
[root@localhost ~]# [ $a -ne 3 ] || [ $b -gt 9 ]
[root@localhost ~]# echo $? #因为左右两边都不成立,故整体不成立
1
! :逻辑否,当制定条件不成立时,返回结果为真
[root@localhost ~]# [ ! $a -ne 3 ] || [ $b -gt 9 ]
[root@localhost ~]# 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 该文件名是否存在且为一个连接文件
示例:
[root@localhost ~]# touch abc.txt
[root@localhost ~]# test -e abc.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -e asdfg.txt
[root@localhost ~]# echo $?
1
[root@localhost ~]# test -f abc.txt
[root@localhost ~]# echo $?
0
文件权限检测
-r 检测文件名是否存在且具有“可读”权限
-w 检测文件名是否存在且具有“可写”权限
-x 检测文件名是否存在且具有“可执行”权限
-u 检测文件名是否存在且具有“SUID”权限
-g 检测文件名是否存在且具有“SGID”权限
-k 检测文件名是否存在且具有“Sticky bit”权限
-s 检测文件名是否存在且为“非空白文件”
示例:
[root@localhost ~]# test -r abc.txt
[root@localhost ~]# echo $?
0
[root@localhost ~]# test -x abc.txt
[root@localhost ~]# echo $?
1
字符串数据判断
-z 判断字符串是否为0,若为空返回true(0)
[root@localhost ~]# test -z "abc"
[root@localhost ~]# echo $?
1
-n 判断字符串是否为0,若为空返回false(0)
[root@localhost ~]# test -n "abc"
[root@localhost ~]# 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 "" | passwd --stdin user$i &> /dev/null
i=`expr $i + 1`
done
Linux基础系列-Day9的更多相关文章
- Linux基础系列-Day2
基础命令(文件内容管理) 1.cat:在当前终端显示文本文件内容 格式:cat [文件路径] -n 从1开始对所有输出的行数编号 -b 和-n相似,只不过对于空白行不编号:2.head:从文件内容开头 ...
- Linux基础系列-Day1
Linux发展简史 Unix:1969年由美国电话电报公司(AT&T)贝尔实验室的两个工程师所创造的操作系统,它允许计算机同时处理多用户和程序. BSD:重要的Unix分支,1977年由加州大 ...
- Linux基础系列—Linux内核源码目录结构
/** ****************************************************************************** * @author 暴走的小 ...
- Linux基础系列—Linux体系结构和Linux内核结构
/** ****************************************************************************** * @author 暴走的小 ...
- Linux基础系列-Day8
Shell编程基础 Shell介绍 Shell俗称壳(用来区别于核),是指“提供使用者使用界面”的软件(命令解析器).它类似于windows下的的cmd.exe.它接收用户命令,然后调用相应的应用程序 ...
- Linux基础系列-Day7
NFS服务(基于CentOS 7.0) NFS(Network File System),网络文件系统,是linux与linux之间进行文件共享的服务,在NFS应用,本地NFS的客户端可以透明地读写位 ...
- Linux基础系列-Day6
Samba服务(基于CentOS 7.0) Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成,Samba主要用于Linux或UNIX和Windows系统之 ...
- Linux基础系列-Day5
网络管理 ifconfig网络管理工具 ifconfig依赖于命令中使用一些选项属性,不仅可以被用来简单地获取网络接口配置信息,还可以修改这些配置,但是通过ifconfig修改的通常为临时配置,即系统 ...
- Linux基础系列-Day4
top系统监控 top命令可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具.通过top命令所提供的互动式界面,用热键可以管理. [root@centos-py ...
随机推荐
- Linux SSH 无密码登录
1. ssh-keygen -t rsa 2. scp root@ip:/root/.ssh/id_rsa.pub ./id2 3. cat id2 >> authtorized_keys ...
- codevs1066&&noip引水入城
这道题 解决第一问 用灌水法 枚举第一行的每一个点 查找是否最后一行的每一个点是否都能灌到水 第二问 用反灌水发 枚举最后一行的每一个点 解决第一行每一个点所能覆盖的左右端点 可以证明每个点所能覆盖的 ...
- 【CodeForces】835D Palindromic characteristics
[题意]给你一个串,让你求出k阶回文子串有多少个.k从1到n.k阶子串的定义是:子串本身是回文串,而且它的左半部分也是回文串. [算法]区间DP [题解]涉及回文问题的区间DP都可以用类似的写法,就是 ...
- 【BZOJ】3779 重组病毒
[算法]Link-Cut Tree+线段树(维护DFS序) [题解]整整三天……T_T 这篇题解比较资瓷:permui 这道题虽然树形态没有变化,但用lct写的原因在于把题目中的操作一进行了神转化:每 ...
- python学习笔记(八)之元组
元组:和列表十分相似,可以说是一个受限的列表.最大的限制是,元组不能更改. 创建元组 >>> tuple1 = (123,'asd',(1,2,3)) >>> tu ...
- scrapy学习笔记一
以前写爬虫都是直接手写获取response然后用正则匹配,被大佬鄙视之后现在决定开始学习scrapy 一.安装 pip install scrapy 二.创建项目 scrapy startprojec ...
- js函数定义方法
1.函数声明 其语法为 function functionName(){ //函数体 } 首先是function关键字,然后是函数名,其重要特征是函数声明提升,即在执行代码之前会先读取函数声明,使其在 ...
- 《Linux内核原理与设计》第十一周作业 ShellShock攻击实验
<Linux内核原理与设计>第十一周作业 ShellShock攻击实验 分组: 和20179215袁琳完成实验及博客攥写 实验内容: Bash中发现了一个严重漏洞shellshock, ...
- HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别
HashMap 1.线程不安全: 2.允许null value 和 null key: 3.访问效率比较高: 4.Java1.2引进的Map接口的一个实现: 5.轻量级: 6.根据键的HashCode ...
- Python阶段复习 - part 4 - 用户登录程序
简易版: #!/usr/bin/env python # _*_ coding:UTF-8 _*_ # __auth__:Dahlhin import sys userinfo = r'userinf ...