常用数值运算方式

  • $[] #四则运算(+ - * / % 取余数)
  • $(()) #数值运算工具
  • expr #数值运算工具
  • let #数值运算工具
  1. [root@localhost ~]# echo $[10+5]
  2. 15
  3. [root@localhost ~]# echo $[10-5]
  4. 5
  5. [root@localhost ~]# echo $[10*5]
  6. 50
  7. [root@localhost ~]# echo $[10/5]
  8. 2
  9. [root@localhost ~]# echo $[10%3]
  10. 1
  11. #$(())做数值运算
  12. [root@localhost ~]# echo $((10+5))
  13. 15
  14. [root@localhost ~]# echo $((10-5))
  15. 5
  16. [root@localhost ~]# echo $((10*5))
  17. 50
  18. [root@localhost ~]# echo $((10/5))
  19. 2
  20. [root@localhost ~]# echo $((10%3))
  21. 1
  22. #expr做数值运算
  23. [root@localhost ~]# echo expr 2+3
  24. expr 2+3
  25. [root@localhost ~]# echo `expr 2+3`
  26. 2+3
  27. #要求每一部分都要有空格
  28. [root@localhost ~]# echo `expr 2 + 3`
  29. 5
  30. [root@localhost ~]# echo `expr 10 - 3`
  31. 7
  32. #当进行乘法运算时,需要实用“\”转义掉*的特殊功能
  33. [root@localhost ~]# echo `expr 10 * 3`
  34. expr: 语法错误
  35. [root@localhost ~]# echo `expr 10 \* 3`
  36. 30
  37. [root@localhost ~]# echo `expr 10 / 3`
  38. 3
  39. #let做数值运算
  40. [root@localhost ~]# let 1+1
  41. #需要将运算的结果赋予一个变量存储
  42. [root@localhost ~]# let x=1+1
  43. [root@localhost ~]# echo $x
  44. 2
  45. [root@localhost ~]# let a=10+5
  46. [root@localhost ~]# echo $a
  47. 15
  48. #通过变量的值进行运算
  49. [root@localhost ~]# let b=a+x
  50. [root@localhost ~]# echo $b
  51. 17
  52. #let简写表达式 #let完整表达式
  53. let i++ let i=i+1
  54. [root@localhost ~]# i=10
  55. [root@localhost ~]# let i++
  56. [root@localhost ~]# echo $i
  57. 11
  58. let i-- let i=i-1
  59. [root@localhost ~]# let i--
  60. [root@localhost ~]# echo $i
  61. 10
  62. let i+=2 let i=i+2
  63. [root@localhost ~]# let i+=2
  64. [root@localhost ~]# echo $i
  65. 12
  66. let i-=2 let i=i-2
  67. [root@localhost ~]# let i-=2
  68. [root@localhost ~]# echo $i
  69. 10
  70. let i*=2 let i=i*2
  71. [root@localhost ~]# let i*=2
  72. [root@localhost ~]# echo $i
  73. 20
  74. let i/=2 let i=i/2
  75. [root@localhost ~]# let i/=2
  76. [root@localhost ~]# echo $i
  77. 10
  78. let i%=2 let i=1%2
  79. [root@localhost ~]# let i%=3
  80. [root@localhost ~]# echo $i
  81. 1

字符串判断

  • -z #字符串的值为空为真
  • -n #字符串的值非空为真(相当于 ! -z)
  1. #判断文件为空为真
  2. [root@localhost ~]# [-z /etc/passwd]
  3. bash: [-z: 未找到命令...
  4. #判断时每一部分要有空格
  5. [root@localhost ~]# [ -z /etc/passwd ]
  6. [root@localhost ~]# echo $?
  7. 1
  8. #判断文件非空为真
  9. [root@localhost ~]# [ -n /etc/passwd ]
  10. [root@localhost ~]# echo $?
  11. 0
  12. [root@localhost ~]# [ -z $i ]
  13. [root@localhost ~]# echo $?
  14. 1
  15. [root@localhost ~]# [ -n $i ]
  16. [root@localhost ~]# echo $?
  17. 0
  18. [root@localhost ~]# [ ! -z $i ]
  19. [root@localhost ~]# echo $?
  20. 0

条件判断结构

  • 当条件满足时执行什么操作,当条件不满足时执行什么操作
  • && #逻辑与(并且)
  • || #逻辑或(或者)
  • ; #条件之间没有逻辑关系
  1. A && B #当A命令执行成功后才会执行B,如果A执行失败则B不执行
  2. #判断存在且是文件执行拷贝操作(并且关系)
  3. [root@localhost ~]# [ -f /etc/passwd ] && cp /etc/passwd /opt
  4. [root@localhost ~]# ls /opt
  5. abc.tar.bz2 passwd
  6. #第一条命令执行失败,后边命令不执行
  7. [root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/passwd /opt
  8. [root@localhost ~]# [ -f /etc/xxoo ] && cp /etc/xxoo /opt
  9. [root@localhost ~]# ls /opt
  10. A || B #当A命令执行失败后才会执行B,如果A执行成功则B不执行
  11. #前便命令执行失败,后边命令则执行
  12. [root@localhost ~]# [ -f /etc/xxoo ] || touch /opt/xxoo.txt
  13. [root@localhost ~]# ls /opt
  14. abc.tar.bz2 passwd xxoo.txt
  15. #前边命令执行成功,后便命令则不执行
  16. [root@localhost ~]# [ -f /etc/fstab ] || touch /opt/fs.txt
  17. [root@localhost ~]# ls /opt
  18. A ; B #执行A命令后执行B,两者没有逻辑关系
  19. [root@localhost ~]# touch /mnt/xx.txt ; touch /opt/xx.txt
  20. [root@localhost ~]# ls /mnt
  21. centos xx.txt
  22. [root@localhost ~]# ls /opt
  23. abc.tar.bz2 abc.txt fs.txt pass.txt passwd xxoo.txt xx.txt
  24. [root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/*
  25. [root@localhost ~]# ls /opt
  26. [root@localhost ~]# touch /opt/oo.txt ; rm -rf /opt/* ; touch /opt/xx.txt ; rm -rf /mnt/xx.txt
  27. [root@localhost ~]# ls /opt
  28. xx.txt
  29. [root@localhost ~]# ls /mnt/

if 条件判断结构

  • if 单分支语句,只能判断对,不能判断错
  1. #第一种语法结构
  2. if [条件判断];then
  3. 条件成立时,执行的命令
  4. fi
  5. #第二种语法结构
  6. if [条件判断]
  7. then
  8. 条件成立时,执行的命令
  9. fi
  10. #if单分支示例
  11. [root@localhost yunwei]# vim if1.sh
  12. #!/bin/bash
  13. if [ -n /etc/passwd ];then
  14. echo "非空"
  15. fi
  16. [root@localhost yunwei]# chmod u+x if1.sh
  17. [root@localhost yunwei]# ./if1.sh
  18. 非空
  19. #只能判断对,不能判断错
  20. [root@localhost yunwei]# vim if1.sh
  21. #!/bin/bash
  22. if [ -z /etc/passwd ];then
  23. echo "非空"
  24. fi

if 双分支语句

  1. if [条件判断];then
  2. 条件成立时,执行命令a
  3. else
  4. 条件不成立时,执行命令b
  5. fi
  6. #if双分支示例
  7. [root@localhost yunwei]# vim if2.sh
  8. #!/bin/bash
  9. if [ -z /etc/passwd ];then
  10. echo '空值'
  11. else
  12. echo '非空'
  13. fi
  14. [root@localhost yunwei]# chmod u+x if2.sh
  15. [root@localhost yunwei]# ./if2.sh
  16. 非空
  17. #编写参数字的脚本,让计算机产生一个0-9随机数
  18. #$RANDOM环境变量,里边存放的是0-65535之间的随机数
  19. [root@localhost yunwei]# echo $RANDOM
  20. 28484
  21. [root@localhost yunwei]# echo $RANDOM
  22. 5440
  23. [root@localhost yunwei]# echo $RANDOM
  24. 29651
  25. [root@localhost yunwei]# echo $RANDOM
  26. 21747
  27. [root@localhost yunwei]# echo $RANDOM
  28. 24494
  29. #实用$RANDOM的值对10取余
  30. [root@localhost yunwei]# echo $[RANDOM%10]
  31. 4
  32. [root@localhost yunwei]# echo $[RANDOM%10]
  33. 2
  34. [root@localhost yunwei]# echo $[RANDOM%10]
  35. 5
  36. [root@localhost yunwei]# echo $[RANDOM%10]
  37. 3
  38. [root@localhost yunwei]# echo $[RANDOM%10]
  39. 9
  40. [root@localhost yunwei]# echo $[RANDOM%10]
  41. 1
  42. [root@localhost yunwei]# echo $[RANDOM%10]
  43. 0
  44. [root@localhost yunwei]# echo $[RANDOM%10]
  45. 3
  46. [root@localhost yunwei]# echo $[RANDOM%10]
  47. 2
  48. #编写猜数字脚本
  49. [root@localhost yunwei]# vim if3.sh
  50. #!/bin/bash
  51. read -p '请输入0-9之间的随机数:' num
  52. num1=$[RANDOM%10]
  53. if [ $num -eq $num1 ];then
  54. echo "恭喜你才对了,奖励一个哇塞女孩!"
  55. else
  56. echo "猜错了,请继续努力,奖品是一个哇塞女孩!"
  57. echo "正确的结果为$num1"
  58. fi
  59. [root@localhost yunwei]# chmod u+x if3.sh
  60. root@localhost yunwei]# ./if3.sh
  61. 请输入0-9之间的随机数:1
  62. 猜错了,请继续努力,奖品是一个哇塞女孩!
  63. 正确的结果为6
  64. [root@localhost yunwei]# ./if3.sh
  65. 请输入0-9之间的随机数:7
  66. 猜错了,请继续努力,奖品是一个哇塞女孩!
  67. 正确的结果为3
  68. [root@localhost yunwei]# ./if3.sh
  69. 请输入0-9之间的随机数:3
  70. 猜错了,请继续努力,奖品是一个哇塞女孩!
  71. 正确的结果为2
  72. [root@localhost yunwei]# ./if3.sh
  73. 请输入0-9之间的随机数:0
  74. 猜错了,请继续努力,奖品是一个哇塞女孩!
  75. 正确的结果为5
  76. [root@localhost yunwei]# ./if3.sh
  77. 请输入0-9之间的随机数:9
  78. 猜错了,请继续努力,奖品是一个哇塞女孩!
  79. 正确的结果为2
  80. [root@localhost yunwei]# ./if3.sh
  81. 请输入0-9之间的随机数:5
  82. 猜错了,请继续努力,奖品是一个哇塞女孩!
  83. 正确的结果为7
  84. #安装软件包脚本
  85. root@localhost yunwei]# vim if4.sh
  86. #!/bin/bash
  87. if [ `rpm -q vsftpd &> /dev/null ; echo $?` -eq 0 ];then
  88. systemctl start vsftpd
  89. systemctl enable vsftpd &> /dev/null
  90. echo "软件包以安装,并设置随机自启"
  91. else
  92. yum -y install vsftpd &> /dev/null
  93. systemctl start vsftpd
  94. systemctl enable vsftpd &> /dev/null
  95. echo "软件包以重新安装上,并设置随机自启"
  96. fi
  97. [root@localhost yunwei]# chmod u+x if4.sh
  98. [root@localhost yunwei]# ./if4.sh
  99. 软件包以重新安装上,并设置随机自启

if 多分支语句

  1. if [条件判断1];then
  2. 条件1成立时,执行命令a
  3. elif [条件判断2];then
  4. 条件2成立时,执行命令b
  5. elif [条件判断3];then
  6. 条件3成立时,执行命令c
  7. ...省略更多条件
  8. else
  9. 所有条件都不成立时,执行命令d
  10. fi
  11. #编写判断成绩脚本
  12. [root@localhost yunwei]# vim if5.sh
  13. #!/bin/bash
  14. read -p "请输入你的成绩(满分为100分):" num
  15. if [ $num -ge 90 ];then
  16. echo "成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩"
  17. elif [ $num -ge 80 ];then
  18. echo "比较优秀"
  19. elif [ $num -ge 70 ];then
  20. echo "一般一般"
  21. elif [ $num -ge 60 ];then
  22. echo "勉强及格"
  23. else
  24. echo "收拾收拾,回家种地去吧!"
  25. fi
  26. [root@localhost yunwei]# chmod u+x if5.sh
  27. [root@localhost yunwei]# ./if5.sh
  28. 请输入你的成绩:66
  29. 勉强及格
  30. [root@localhost yunwei]# ./if5.sh
  31. 请输入你的成绩:55
  32. 收拾收拾,回家种地去吧!
  33. [root@localhost yunwei]# ./if5.sh
  34. 请输入你的成绩:0
  35. 收拾收拾,回家种地去吧!
  36. [root@localhost yunwei]# ./if5.sh
  37. 请输入你的成绩:99
  38. 成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
  39. [root@localhost yunwei]# vim if5.sh
  40. [root@localhost yunwei]# ./if5.sh
  41. 请输入你的成绩(满分为100分):100
  42. 成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
  43. [root@localhost yunwei]# ./if5.sh
  44. 请输入你的成绩(满分为100分):90
  45. 成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩
  46. [root@localhost yunwei]# ./if5.sh
  47. 请输入你的成绩(满分为100分):200
  48. 成绩非常优秀!,奖励一个肤白貌美大长腿,绝世容颜哇塞女孩

case条件判断结构

  • case从变量中取值,如果变量中的值与预设的值匹配,则执行对应的命令
  1. #case语法结构
  2. case $变量名 in
  3. 1)
  4. 执行的命令xx;; #如果变量中的值等于值1,则执行的命令
  5. 2)
  6. 执行的命令yy;; #如果变量中的值等于2,则执行的命令
  7. ...省略其他分支
  8. *)
  9. 执行的命令zz;; #如果变量中的值都不是以上的值,则执行的命令
  10. esac
  11. [root@localhost yunwei]# vim case.sh
  12. #!/bin/bash
  13. read -p "请输入您喜爱的老师(仓老师|波多老师|小泽老师):" xxoo
  14. case $xxoo in
  15. 仓老师)
  16. echo "又白又嫩又水润,上楼右转1号房间!";;
  17. 波多老师)
  18. echo "前凸后翘,波涛汹涌,上楼右转2号房间!";;
  19. 小泽老师)
  20. echo "肤白貌美大长腿,上楼右转3号房间!";;
  21. *)
  22. echo "老师休假了";;
  23. esac
  24. [root@localhost yunwei]# chmod u+x case.sh
  25. [root@localhost yunwei]# ./case.sh
  26. 请输入您喜爱的老师(仓老师|波多老师|小泽老师):仓老师
  27. 又白又嫩又水润,上楼右转1号房间!
  28. [root@localhost yunwei]# ./case.sh 波多老师
  29. 请输入您喜爱的老师(仓老师|波多老师|小泽老师):波多老师
  30. 前凸后翘,波涛汹涌,上楼右转2号房间!
  31. [root@localhost yunwei]# ./case.sh
  32. 请输入您喜爱的老师(仓老师|波多老师|小泽老师):小泽老师
  33. 肤白貌美大长腿,上楼右转3号房间!
  34. [root@localhost yunwei]# ./case.sh
  35. 请输入您喜爱的老师(仓老师|波多老师|小泽老师):穆穆老师
  36. 老师休假了

for循环

  • for循环处理,根据变量的取值,重复执行xx命令
  1. #for循环语法结构
  2. for 变量名 in 1 2 3 N...
  3. do
  4. 执行的命令
  5. done
  6. #编写循环创建用户脚本
  7. [root@localhost yunwei]# vim user.sh
  8. #!/bin/bash
  9. for user in xiaofang xiaowei jiumei alian
  10. do
  11. useradd $user
  12. echo "$user 创建成功"
  13. echo 1 | passwd --stdin $user &> /dev/null
  14. echo "$user 密码设置成功,初始密码为“1”"
  15. done
  16. [root@localhost yunwei]# chmod u+x user.sh
  17. [root@localhost yunwei]# ./user.sh
  18. useradd:用户“xiaofang”已存在
  19. xiaofang 创建成功
  20. xiaofang 密码设置成功,初始密码为“1
  21. xiaowei 创建成功
  22. xiaowei 密码设置成功,初始密码为“1
  23. jiumei 创建成功
  24. jiumei 密码设置成功,初始密码为“1
  25. alian 创建成功
  26. alian 密码设置成功,初始密码为“1
  27. #测试企业的服务器联通性
  28. #!/bin/bash
  29. for i in `seq 254`
  30. do
  31. ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null #-c ping几次 -i ping延迟时间 -w ping超时时间
  32. if [ $? -eq 0 ];then
  33. echo "192.168.0.$i UP"
  34. else
  35. echo "192.168.0.$i DOWN"
  36. fi
  37. done
  38. [root@localhost yunwei]# chmod u+x ping.sh
  39. [root@localhost yunwei]# ./ping.sh
  40. #问题:如何将ping的命令结果存储到文件当中,正确的输出结果与错误的输出结果分别单独存储
  41. #!/bin/bash
  42. echo "请耐心等待!正在进行ping测试!"
  43. for i in `seq 4`
  44. do
  45. ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null #-c ping几>次 -i ping延迟时间 -w ping超时时间
  46. if [ $? -eq 0 ];then
  47. echo "192.168.0.$i UP" &>> /opt/ping_up.txt
  48. else
  49. echo "192.168.0.$i DOWN" &>> /opt/ping_done.txt
  50. fi
  51. done
  52. echo "记录完成!"

while循环

  • 死循环,只要条件成立就重复执行命令
  1. #while循环语法结构
  2. while 条件判断
  3. do
  4. 执行的命令
  5. done
  6. #编写while循环脚本
  7. [root@localhost yunwei]# vim while.sh
  8. #!/bin/bash
  9. a=1
  10. while [ $a -le 5 ]
  11. do
  12. echo $a
  13. done
  14. [root@localhost yunwei]# chmod u+x while.sh
  15. #指定循环的固定次数
  16. [root@localhost yunwei]# vim while.sh
  17. #!/bin/bash
  18. a=1
  19. while [ $a -le 5 ]
  20. do
  21. echo $a
  22. let a++
  23. sleep 0.1
  24. done
  25. #使用while循环编写猜数字脚本
  26. [root@localhost yunwei]# vim while1.sh
  27. #!/bin/bash
  28. num=$[RANDOM%10]
  29. while :
  30. do
  31. read -p "请输入0-10之间的数字:" num1
  32. if [ $num -eq $num1 ];then
  33. echo "恭喜你才对了,奖励一个绝世容颜哇塞女孩!"
  34. exit #退出脚本
  35. else
  36. echo "请继续努力,离哇塞女孩还差一步了,加油!"
  37. fi
  38. done
  39. #利用while循环监控网卡进出口流量
  40. [root@localhost ~]# vim net_ens32.sh
  41. #!/bin/bash
  42. while :
  43. do
  44. clear #清屏
  45. ifconfig ens32 | head -2 #显示网卡头两行信息
  46. ifconfig ens32 | grep "RX p" #网卡入口流量
  47. ifconfig ens32 | grep "TX p" #网卡出口流量
  48. sleep 0.2 #休眠0.2秒
  49. done
  50. #使用while循环编写一个测试整个网段IP地址的联通性脚本
  51. #!/bin/bash
  52. echo "请耐心等待,正在进行ping测试!"
  53. i=1
  54. while [ $i -le 4 ]
  55. do
  56. ping -c2 -i0.1 -W1 192.168.0.$i &> /dev/null
  57. if [ $? -eq 0 ];then
  58. echo "192.168.0.$i UP" &>> /opt/ping_up.txt
  59. else
  60. echo "192.168.0.$i DOWN" &>> /opt/ping_done.txt
  61. fi
  62. let i++
  63. done
  64. echo "记录完成!"
  65. ~