RHCE_DAY02
常用数值运算方式
$[] #四则运算(+ - * / % 取余数)
$(()) #数值运算工具
expr #数值运算工具
let #数值运算工具
[root@localhost ~]# echo $[10+5]
15
[root@localhost ~]# echo $[10-5]
5
[root@localhost ~]# echo $[10*5]
50
[root@localhost ~]# echo $[10/5]
2
[root@localhost ~]# echo $[10%3]
1
#$(())做数值运算
[root@localhost ~]# echo $((10+5))
15
[root@localhost ~]# echo $((10-5))
5
[root@localhost ~]# echo $((10*5))
50
[root@localhost ~]# echo $((10/5))
2
[root@localhost ~]# echo $((10%3))
1
#expr做数值运算
[root@localhost ~]# echo expr 2+3
expr 2+3
[root@localhost ~]# echo `expr 2+3`
2+3
#要求每一部分都要有空格
[root@localhost ~]# echo `expr 2 + 3`
5
[root@localhost ~]# echo `expr 10 - 3`
7
#当进行乘法运算时,需要实用“\”转义掉*的特殊功能
[root@localhost ~]# echo `expr 10 * 3`
expr: 语法错误
[root@localhost ~]# echo `expr 10 \* 3`
30
[root@localhost ~]# echo `expr 10 / 3`
3
#let做数值运算
[root@localhost ~]# let 1+1
#需要将运算的结果赋予一个变量存储
[root@localhost ~]# let x=1+1
[root@localhost ~]# echo $x
2
[root@localhost ~]# let a=10+5
[root@localhost ~]# echo $a
15
#通过变量的值进行运算
[root@localhost ~]# let b=a+x
[root@localhost ~]# echo $b
17
#let简写表达式 #let完整表达式
let i++ let i=i+1
[root@localhost ~]# i=10
[root@localhost ~]# let i++
[root@localhost ~]# echo $i
11
let i-- let i=i-1
[root@localhost ~]# let i--
[root@localhost ~]# echo $i
10
let i+=2 let i=i+2
[root@localhost ~]# let i+=2
[root@localhost ~]# echo $i
12
let i-=2 let i=i-2
[root@localhost ~]# let i-=2
[root@localhost ~]# echo $i
10
let i*=2 let i=i*2
[root@localhost ~]# let i*=2
[root@localhost ~]# echo $i
20
let i/=2 let i=i/2
[root@localhost ~]# let i/=2
[root@localhost ~]# echo $i
10
let i%=2 let i=1%2
[root@localhost ~]# let i%=3
[root@localhost ~]# echo $i
1
字符串判断
- -z #字符串的值为空为真
- -n #字符串的值非空为真(相当于 ! -z)
#判断文件为空为真
[root@localhost ~]# [-z /etc/passwd]
bash: [-z: 未找到命令...
#判断时每一部分要有空格
[root@localhost ~]# [ -z /etc/passwd ]
[root@localhost ~]# echo $?
1
#判断文件非空为真
[root@localhost ~]# [ -n /etc/passwd ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ -z $i ]
[root@localhost ~]# echo $?
1
[root@localhost ~]# [ -n $i ]
[root@localhost ~]# echo $?
0
[root@localhost ~]# [ ! -z $i ]
[root@localhost ~]# echo $?
0
条件判断结构
当条件满足时执行什么操作,当条件不满足时执行什么操作
&& #逻辑与(并且)
|| #逻辑或(或者)
; #条件之间没有逻辑关系
A && B #当A命令执行成功后才会执行B,如果A执行失败则B不执行
#判断存在且是文件执行拷贝操作(并且关系)
[root@localhost ~]# [ -f /etc/passwd ] && cp /etc/passwd /opt
[root@localhost ~]# ls /opt
abc.tar.bz2 passwd
#第一条命令执行失败,后边命令不执行
[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/passwd /opt
[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/xxoo /opt
[root@localhost ~]# ls /opt
A || B #当A命令执行失败后才会执行B,如果A执行成功则B不执行
#前便命令执行失败,后边命令则执行
[root@localhost ~]# [ -f /etc/xxoo ] || touch /opt/xxoo.txt
[root@localhost ~]# ls /opt
abc.tar.bz2 passwd xxoo.txt
#前边命令执行成功,后便命令则不执行
[root@localhost ~]# [ -f /etc/fstab ] || touch /opt/fs.txt
[root@localhost ~]# ls /opt
A ; B #执行A命令后执行B,两者没有逻辑关系
[root@localhost ~]# touch /mnt/xx.txt ; touch /opt/xx.txt
[root@localhost ~]# ls /mnt
centos xx.txt
[root@localhost ~]# ls /opt
abc.tar.bz2 abc.txt fs.txt pass.txt passwd xxoo.txt xx.txt
[root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/*
[root@localhost ~]# ls /opt
[root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/* ; touch /opt/xx.txt ; rm -rf /mnt/xx.txt
[root@localhost ~]# ls /opt
xx.txt
[root@localhost ~]# ls /mnt/
if 条件判断结构
- if 单分支语句,只能判断对,不能判断错
#第一种语法结构
if [条件判断];then
条件成立时,执行的命令
fi
#第二种语法结构
if [条件判断]
then
条件成立时,执行的命令
fi
#if单分支示例
[root@localhost yunwei]# vim if1.sh
#!/bin/bash
if [ -n /etc/passwd ];then
echo "非空"
fi
[root@localhost yunwei]# chmod u+x if1.sh
[root@localhost yunwei]# ./if1.sh
非空
#只能判断对,不能判断错
[root@localhost yunwei]# vim if1.sh
#!/bin/bash
if [ -z /etc/passwd ];then
echo "非空"
fi
if 双分支语句
if [条件判断];then
条件成立时,执行命令a
else
条件不成立时,执行命令b
fi
#if双分支示例
[root@localhost yunwei]# vim if2.sh
#!/bin/bash
if [ -z /etc/passwd ];then
echo '空值'
else
echo '非空'
fi
[root@localhost yunwei]# chmod u+x if2.sh
[root@localhost yunwei]# ./if2.sh
非空
#编写参数字的脚本,让计算机产生一个0-9随机数
#$RANDOM环境变量,里边存放的是0-65535之间的随机数
[root@localhost yunwei]# echo $RANDOM
28484
[root@localhost yunwei]# echo $RANDOM
5440
[root@localhost yunwei]# echo $RANDOM
29651
[root@localhost yunwei]# echo $RANDOM
21747
[root@localhost yunwei]# echo $RANDOM
24494
#实用$RANDOM的值对10取余
[root@localhost yunwei]# echo $[RANDOM%10]
4
[root@localhost yunwei]# echo $[RANDOM%10]
2
[root@localhost yunwei]# echo $[RANDOM%10]
5
[root@localhost yunwei]# echo $[RANDOM%10]
3
[root@localhost yunwei]# echo $[RANDOM%10]
9
[root@localhost yunwei]# echo $[RANDOM%10]
1
[root@localhost yunwei]# echo $[RANDOM%10]
0
[root@localhost yunwei]# echo $[RANDOM%10]
3
[root@localhost yunwei]# echo $[RANDOM%10]
2
#编写猜数字脚本
[root@localhost yunwei]# vim if3.sh
#!/bin/bash
read -p '请输入0-9之间的随机数:' num
num1=$[RANDOM%10]
if [ $num -eq $num1 ];then
echo "恭喜你才对了,奖励一个哇塞女孩!"
else
echo "猜错了,请继续努力,奖品是一个哇塞女孩!"
echo "正确的结果为$num1"
fi
[root@localhost yunwei]# chmod u+x if3.sh
root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:1
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为6
[root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:7
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为3
[root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:3
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为2
[root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:0
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为5
[root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:9
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为2
[root@localhost yunwei]# ./if3.sh
请输入0-9之间的随机数:5
猜错了,请继续努力,奖品是一个哇塞女孩!
正确的结果为7
#安装软件包脚本
root@localhost yunwei]# vim if4.sh
#!/bin/bash
if [ `rpm -q vsftpd &> /dev/null ; echo $?` -eq 0 ];then
systemctl start vsftpd
systemctl enable vsftpd &> /dev/null
echo "软件包以安装,并设置随机自启"
else
yum -y install vsftpd &> /dev/null
systemctl start vsftpd
systemctl enable vsftpd &> /dev/null
echo "软件包以重新安装上,并设置随机自启"
fi
[root@localhost yunwei]# chmod u+x if4.sh
[root@localhost yunwei]# ./if4.sh
软件包以重新安装上,并设置随机自启
if 多分支语句
if [条件判断1];then
条件1成立时,执行命令a
elif [条件判断2];then
条件2成立时,执行命令b
elif [条件判断3];then
条件3成立时,执行命令c
...省略更多条件
else
所有条件都不成立时,执行命令d
fi
#编写判断成绩脚本
[root@localhost yunwei]# vim if5.sh
#!/bin/bash
read -p "请输入你的成绩(满分为100分):" num
if [ $num -ge 90 ];then
echo "成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩"
elif [ $num -ge 80 ];then
echo "比较优秀"
elif [ $num -ge 70 ];then
echo "一般一般"
elif [ $num -ge 60 ];then
echo "勉强及格"
else
echo "收拾收拾,回家种地去吧!"
fi
[root@localhost yunwei]# chmod u+x if5.sh
[root@localhost yunwei]# ./if5.sh
请输入你的成绩:66
勉强及格
[root@localhost yunwei]# ./if5.sh
请输入你的成绩:55
收拾收拾,回家种地去吧!
[root@localhost yunwei]# ./if5.sh
请输入你的成绩:0
收拾收拾,回家种地去吧!
[root@localhost yunwei]# ./if5.sh
请输入你的成绩:99
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# vim if5.sh
[root@localhost yunwei]# ./if5.sh
请输入你的成绩(满分为100分):100
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# ./if5.sh
请输入你的成绩(满分为100分):90
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
[root@localhost yunwei]# ./if5.sh
请输入你的成绩(满分为100分):200
成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
case条件判断结构
- case从变量中取值,如果变量中的值与预设的值匹配,则执行对应的命令
#case语法结构
case $变量名 in
值1)
执行的命令xx;; #如果变量中的值等于值1,则执行的命令
值2)
执行的命令yy;; #如果变量中的值等于2,则执行的命令
...省略其他分支
*)
执行的命令zz;; #如果变量中的值都不是以上的值,则执行的命令
esac
[root@localhost yunwei]# vim case.sh
#!/bin/bash
read -p "请输入您喜爱的老师(仓老师|波多老师|小泽老师):" xxoo
case $xxoo in
仓老师)
echo "又白又嫩又水润,上楼右转1号房间!";;
波多老师)
echo "前凸后翘,波涛汹涌,上楼右转2号房间!";;
小泽老师)
echo "肤白貌美大长腿,上楼右转3号房间!";;
*)
echo "老师休假了";;
esac
[root@localhost yunwei]# chmod u+x case.sh
[root@localhost yunwei]# ./case.sh
请输入您喜爱的老师(仓老师|波多老师|小泽老师):仓老师
又白又嫩又水润,上楼右转1号房间!
[root@localhost yunwei]# ./case.sh 波多老师
请输入您喜爱的老师(仓老师|波多老师|小泽老师):波多老师
前凸后翘,波涛汹涌,上楼右转2号房间!
[root@localhost yunwei]# ./case.sh
请输入您喜爱的老师(仓老师|波多老师|小泽老师):小泽老师
肤白貌美大长腿,上楼右转3号房间!
[root@localhost yunwei]# ./case.sh
请输入您喜爱的老师(仓老师|波多老师|小泽老师):穆穆老师
老师休假了
for循环
- for循环处理,根据变量的取值,重复执行xx命令
#for循环语法结构
for 变量名 in 值1 值2 值3 值N...
do
执行的命令
done
#编写循环创建用户脚本
[root@localhost yunwei]# vim user.sh
#!/bin/bash
for user in xiaofang xiaowei jiumei alian
do
useradd $user
echo "$user 创建成功"
echo 1 | passwd --stdin $user &> /dev/null
echo "$user 密码设置成功,初始密码为“1”"
done
[root@localhost yunwei]# chmod u+x user.sh
[root@localhost yunwei]# ./user.sh
useradd:用户“xiaofang”已存在
xiaofang 创建成功
xiaofang 密码设置成功,初始密码为“1”
xiaowei 创建成功
xiaowei 密码设置成功,初始密码为“1”
jiumei 创建成功
jiumei 密码设置成功,初始密码为“1”
alian 创建成功
alian 密码设置成功,初始密码为“1”
#测试企业的服务器联通性
#!/bin/bash
for i in `seq 254`
do
ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null #-c ping几次 -i ping延迟时间 -w ping超时时间
if [ $? -eq 0 ];then
echo "192.168.0.$i UP"
else
echo "192.168.0.$i DOWN"
fi
done
[root@localhost yunwei]# chmod u+x ping.sh
[root@localhost yunwei]# ./ping.sh
#问题:如何将ping的命令结果存储到文件当中,正确的输出结果与错误的输出结果分别单独存储
#!/bin/bash
echo "请耐心等待!正在进行ping测试!"
for i in `seq 4`
do
ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null #-c ping几>次 -i ping延迟时间 -w ping超时时间
if [ $? -eq 0 ];then
echo "192.168.0.$i UP" &>> /opt/ping_up.txt
else
echo "192.168.0.$i DOWN" &>> /opt/ping_done.txt
fi
done
echo "记录完成!"
while循环
- 死循环,只要条件成立就重复执行命令
#while循环语法结构
while 条件判断
do
执行的命令
done
#编写while循环脚本
[root@localhost yunwei]# vim while.sh
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo $a
done
[root@localhost yunwei]# chmod u+x while.sh
#指定循环的固定次数
[root@localhost yunwei]# vim while.sh
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo $a
let a++
sleep 0.1
done
#使用while循环编写猜数字脚本
[root@localhost yunwei]# vim while1.sh
#!/bin/bash
num=$[RANDOM%10]
while :
do
read -p "请输入0-10之间的数字:" num1
if [ $num -eq $num1 ];then
echo "恭喜你才对了,奖励一个绝世容颜哇塞女孩!"
exit #退出脚本
else
echo "请继续努力,离哇塞女孩还差一步了,加油!"
fi
done
#利用while循环监控网卡进出口流量
[root@localhost ~]# vim net_ens32.sh
#!/bin/bash
while :
do
clear #清屏
ifconfig ens32 | head -2 #显示网卡头两行信息
ifconfig ens32 | grep "RX p" #网卡入口流量
ifconfig ens32 | grep "TX p" #网卡出口流量
sleep 0.2 #休眠0.2秒
done
#使用while循环编写一个测试整个网段IP地址的联通性脚本
#!/bin/bash
echo "请耐心等待,正在进行ping测试!"
i=1
while [ $i -le 4 ]
do
ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null
if [ $? -eq 0 ];then
echo "192.168.0.$i UP" &>> /opt/ping_up.txt
else
echo "192.168.0.$i DOWN" &>> /opt/ping_done.txt
fi
let i++
done
echo "记录完成!"
~
RHCE_DAY02的更多相关文章
随机推荐
- gRPC(2):四种基本通信模式
在 gRPC(1):入门及简单使用(go) 中,我们实现了一个简单的 gRPC 应用程序,其中双方通信是简单的请求-响应模式,没发出一个请求都会得到一个响应,然而,借助 gRPC 可以实现不同的通信模 ...
- C#/VB.NET 设置PDF跨页表格重复显示表头行
在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好.下面分享一个方法如何在表格跨页时显示表格的表头内容,在C#中只需要简单使用方法grid.Re ...
- [心得体会]RabbitMQ
RabbitMQ是什么? 消息队列, 基于AMQP(高级消息队列), 使用Erlang语言编写, 收发消息使用 有什么用? 有什么应用场景? 1. 任务异步处理 2. 应用程序解耦 为什么使用Rabb ...
- PHP中“简单工厂模式”实例讲解(转)
? 1 2 3 4 5 6 7 8 原创文章,转载请注明出处:http://www.cnblogs.com/hongfei/archive/2012/07/07/2580776.html 简单 ...
- XCTF-boomshakalaka-3
这题讲道理出的挺脑洞的,apk直接拖入jeb打开,找到主活动 这里有两个方法,一个是onCreate()方法,还有一个是onCreateView()方法 onCreate()方法调用了a这个对象的d方 ...
- 2012年第三届蓝桥杯C/C++程序设计本科B组省赛题目 海盗比酒量 结果填空
** 一.题目 ** 海盗比酒量 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复- 直到开了第4瓶酒,坐 ...
- spring集成flyway
最近给公司项目集成flyway,由于我们项目移动端使用的是spring框架,网上看了很多博客,感觉这方面的东西还是很少的,毕竟现在是springboot的天下,大多数都是springboot集成fly ...
- django 使用jpype 报错:raise+OSError('JVM+cannot+be+restarted')
#调用jar包 def getJar(arg1,arg2): jarpath = os.path.join(os.path.abspath('.'), 'tools/GetTest-1.0-SNAPS ...
- 计算机网络体系结构整理-第二单元IP技术
IP技术 1.IPV4 Ipv4的报头格式 Ipv4地址分为ABCDE类, 类别 IP地址范围 私有IP地址范围 A 0.0.0.0-127.255.255.255 10.0.0.0-10.255.2 ...
- Entity Framework Core中的数据迁移命令
使用程序包管理控制台输入命令. 数据迁移命令: Add-Migration 对比当前数据库和模型的差异,生成相应的代码,使数据库和模型匹配的. Remove-Migration 删除上次的迁移 Sc ...