$[] #四则运算(+ - * / % 取余数)
$(()) #数值运算工具
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
#判断文件为空为真 [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 [条件判断];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 [条件判断];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 [条件判断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 $变量名 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 变量名 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 条件判断 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 "记录完成!" ~