常用数值运算方式
- $[] #四则运算(+ - * / % 取余数)
- $(()) #数值运算工具
- 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+3expr 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 $x2[root@localhost ~]# let a=10+5[root@localhost ~]# echo $a15#通过变量的值进行运算[root@localhost ~]# let b=a+x[root@localhost ~]# echo $b17#let简写表达式 #let完整表达式let i++ let i=i+1[root@localhost ~]# i=10[root@localhost ~]# let i++[root@localhost ~]# echo $i11let i-- let i=i-1[root@localhost ~]# let i--[root@localhost ~]# echo $i10let i+=2 let i=i+2[root@localhost ~]# let i+=2[root@localhost ~]# echo $i12let i-=2 let i=i-2[root@localhost ~]# let i-=2[root@localhost ~]# echo $i10let i*=2 let i=i*2[root@localhost ~]# let i*=2[root@localhost ~]# echo $i20let i/=2 let i=i/2[root@localhost ~]# let i/=2[root@localhost ~]# echo $i10let i%=2 let i=1%2[root@localhost ~]# let i%=3[root@localhost ~]# echo $i1
字符串判断
- -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 /optabc.tar.bz2 passwd#第一条命令执行失败,后边命令不执行[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/passwd /opt[root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/xxoo /opt[root@localhost ~]# ls /optA || B #当A命令执行失败后才会执行B,如果A执行成功则B不执行#前便命令执行失败,后边命令则执行[root@localhost ~]# [ -f /etc/xxoo ] || touch /opt/xxoo.txt[root@localhost ~]# ls /optabc.tar.bz2 passwd xxoo.txt#前边命令执行成功,后便命令则不执行[root@localhost ~]# [ -f /etc/fstab ] || touch /opt/fs.txt[root@localhost ~]# ls /optA ; B #执行A命令后执行B,两者没有逻辑关系[root@localhost ~]# touch /mnt/xx.txt ; touch /opt/xx.txt[root@localhost ~]# ls /mntcentos xx.txt[root@localhost ~]# ls /optabc.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 /optxx.txt[root@localhost ~]# ls /mnt/
if 条件判断结构
#第一种语法结构if [条件判断];then 条件成立时,执行的命令fi#第二种语法结构if [条件判断] then 条件成立时,执行的命令fi#if单分支示例[root@localhost yunwei]# vim if1.sh #!/bin/bashif [ -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/bashif [ -z /etc/passwd ];then echo "非空"fi
if 双分支语句
if [条件判断];then 条件成立时,执行命令a else 条件不成立时,执行命令bfi#if双分支示例[root@localhost yunwei]# vim if2.sh #!/bin/bashif [ -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 $RANDOM28484[root@localhost yunwei]# echo $RANDOM5440[root@localhost yunwei]# echo $RANDOM29651[root@localhost yunwei]# echo $RANDOM21747[root@localhost yunwei]# echo $RANDOM24494#实用$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/bashread -p '请输入0-9之间的随机数:' numnum1=$[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/bashif [ `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成立时,执行命令aelif [条件判断2];then 条件2成立时,执行命令b elif [条件判断3];then 条件3成立时,执行命令c...省略更多条件else 所有条件都不成立时,执行命令dfi#编写判断成绩脚本[root@localhost yunwei]# vim if5.sh#!/bin/bashread -p "请输入你的成绩(满分为100分):" numif [ $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/bashread -p "请输入您喜爱的老师(仓老师|波多老师|小泽老师):" xxoocase $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循环语法结构for 变量名 in 值1 值2 值3 值N...do 执行的命令done#编写循环创建用户脚本[root@localhost yunwei]# vim user.sh#!/bin/bashfor user in xiaofang xiaowei jiumei aliando 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/bashfor 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" fidone[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 fidone echo "记录完成!"
while循环
#while循环语法结构while 条件判断do 执行的命令done#编写while循环脚本[root@localhost yunwei]# vim while.sh#!/bin/basha=1while [ $a -le 5 ]doecho $adone[root@localhost yunwei]# chmod u+x while.sh #指定循环的固定次数[root@localhost yunwei]# vim while.sh#!/bin/basha=1while [ $a -le 5 ]do echo $a let a++ sleep 0.1done#使用while循环编写猜数字脚本[root@localhost yunwei]# vim while1.sh #!/bin/bashnum=$[RANDOM%10]while :do read -p "请输入0-10之间的数字:" num1 if [ $num -eq $num1 ];then echo "恭喜你才对了,奖励一个绝世容颜哇塞女孩!" exit #退出脚本 else echo "请继续努力,离哇塞女孩还差一步了,加油!" fidone#利用while循环监控网卡进出口流量[root@localhost ~]# vim net_ens32.sh #!/bin/bashwhile :doclear #清屏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=1while [ $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 filet i++done echo "记录完成!"~