if语句 单分支if条件语句 格式:
1 2 3 4 5 6 7 8 9 10 if [ 条件判断式 ] ; then 程序 fi if [ 条件判断式 ] then 程序 fi
注意与说明:
a. if语句使用 fi 结尾,和一般语言使用大括号结尾有所不同
b. [ 条件判断式 ] 就是使用test命令判断,所以中括号和条件判断式之间必须有空格
c. then后 面跟符合条件之后执行的程序,可以放在[ ]之后,用“:”分割,也可以换行写入,则不需要“:”分割了
示例1: 创建一个脚本文件/usr/local/myshell/the-if1.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #! / bin/ bash #统计根分区的使用率 # Author: eayyoung (E- mail:2970401025 @qq .com) rate= $(df - h | grep "/dev/sda3" | awk '{print $5}' | cut - d "%" - f1) #把根分区sda3的使用率作为变量值赋予变量rate if [ "$rate" - ge 80 ] / / 在这一行将变量的双引号加上或者改为双中括号 #如果rate变量大于等于80 Then echo "warning! /dev/sda3 is full!!!" #输出“警告!磁盘sda3已经满了” Fi
退出,chmod 755 the-if1.sh
赋予执行权限,并 ./the-if1.sh 执行此脚本
如果执行脚本报错,如:./the-if1.sh
: 第 9 行:[: -le: 期待一元表达式
解决方案:
当 if 语句中使用 [ ] 条件修饰符时, $TNT 变量必须加上引号。
当 if 语句中使用 [[ ]] 条件修饰符时,$TNT 变量的引号可有可无。
双分支if条件语句 格式
1 2 3 4 5 6 if [ 条件判断式 ] then 条件成立时,执行的程序 else 条件不成立时,执行的另一个程序 fi
示例1: 备份mysql数据库;创建一个脚本文件/usr/local/myshell/the-if2.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #! / bin/ bash #备份mysql数据库 # Author: eayyoung (E- mail:2970401025 @qq .com) ntpdate asia.pool.ntp.org & > / dev/ null / / null :垃圾箱 #同步系统时间 date = $(date + % y% m% d)#把当前系统时间按照“年月日"格式赋予变量date size=$(du -sh /var/lib/mysql) #统计mysql数据库的大小,并把大小赋予size变量 if [ -d /tmp/dbbak ] //判断此文件是否存在,并且是否为目录 then echo "Date :$date ! " > /tem/dbbak/dbinfo.txt echo "Date size :$size" >> /tem/dbbak/dbinfo.txt cd /tem/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null rm -rf /tem/dbbak/dbonfo.txt else mkdir /tem/dbbak //如果不存在,创建一个dbbak目录 echo "Date :$date ! " > /tem/dbbak/dbinfo.txt echo "Date size :$size" >> /tem/dbbak/dbinfo.txt cd /tem/dbbak tar -zcf mysql-lib-$date.tar.gz /var/lib/mysql dbinfo.txt &>/dev/null //以覆盖方式将命令的正确和错误输出都扔进垃圾箱 rm -rf /tem/dbbak/dbonfo.txt fi
退出,chmod 755 the-if2.sh
赋予执行权限,并 ./the-if2.sh
执行此脚本
示例2: 判断apache是否启动;创建一个脚本文件/usr/local/myshell/the-if3.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #! / bin/ bash #判断apache是否启动 # Author: eayyoung (E- mail:2970401025 @qq .com) prot= $(nmap - sT 192.168 .88 .66 | grep tcp | grep http | awk '{print $2}' ) #使用nmap命令扫描服务器,并截取apache服务的状态,赋予变量port(前提需安装nmap扫描工具) if [ "$port" = = "open" ] then echo "$(date) httpd is ok!" >> / tmp/ autostart- acc.log else / etc/ rc.d/ init.d/ httpd start & > / dev/ null echo "$(date) restart httpd !!" >> / tmp/ autostart- err.log fi
退出,chmod 755 the-if3.sh
赋予执行权限,并 ./the-if3.sh
执行此脚本
多分支if条件语句 格式:
1 2 3 4 5 6 7 8 9 10 if [ 条件判断式1 ] then 当条件判断式1 成立时,执行程序1 elif [ 条件判断式2 ] then 当条件判断式2 成立时,执行程序2 # …省略更多的条件判断式… else 当所有条件判断式不成立时,最后执行此程序 fi
示例1: 判断用户输入的是什么文件;创建一个脚本文件/usr/local/myshell/the-if4.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #! / bin/ bash #判断用户输入的是什么文件 # Author: eayyoung (E- mail:2970401025 @qq .com) read - p "Please input a filename:" file #接收键盘的输入,并赋予变量file if [ - z "$file" ] #判断file变量是否为空 then echo "Error, please input a correct filename!" exit 1 elif [ ! - e "$file" ] #判断file的值是否存在 then echo "Your input is not a correct file!" exit 2 elif [ - f "$file" ] #判断file的值是否为普通文件 then echo "$file is a regulare file!" elif [ - d "$file" ] #判断file的值是否为目录文件 then echo "$file is a directory!" else echo "$file is an other file!' Fi
退出,chmod 755 the-if4.sh
赋予执行权限,并 ./the-if4.sh
执行此脚本
case语句
多分支case条件语句 概述:
case
语句和if…elif…else
语句一样都是多分支条件语句,但和if不同的是,case语句只能判断一种条件关系,而if语句能判断多种条件关系。
格式1:
1 2 3 4 5 6 7 8 9 10 11 case $变量名 in "值1") 当变量的值等于值1 ,则执行程序1 ; ; "值2") 当变量的值等于值2 ,则执行程序2 ; ; # …省略更多的条件判断式…< br> * ) 如果变量的值都不是以上的值,则执行此程序 ; ; esac
示例1: 判断用户的输入;创建一个脚本文件/usr/local/myshell/the-case1.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #! / bin/ bash #判断用户的输入 # Author: eayyoung (E- mail:2970401025 @qq .com) read - p "Please choose yes or no : " - t 30 cho #使用read命令,读取键盘的输入,并设置变量名为 cho ,详细参考 《centos- shell基础- 变量》 case $cho in "yes") echo "Your choose is yes!" ; ; "no") echo "Your choose is no!" ; ; * ) echo "Your choose is error!!" ; ; esac
退出,chmod 755 the-case1.sh
赋予执行权限,并 ./the-case1.sh
执行此脚本
for循环
for循环格式1 格式1:
1 2 3 4 5 6 for 变量名 in 值1 值2 值3 … do 程序 done < br> < br> |
示例1: 批量解压缩脚本;创建一个脚本文件/usr/local/myshell/the-for1.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 #! / bin/ bash #批量解压缩脚本 # Author: eayyoung (E- mail:2970401025 @qq .com) cd / lamp ls * .tar.z > ls.log for i in $(cat ls.log) do tar - zxf $i & > / dev/ null done rm - rf / lamp/ ls.log
退出,chmod 755 the-for1.sh
赋予执行权限,并 ./the-for1.sh
执行此脚本
示例2: 打印时间;创建一个脚本文件/usr/local/myshell/the-for2.sh
,并进行编辑
1 2 3 4 5 6 7 8 #! / bin/ bash #打印时间 # Author: eayyoung (E- mail:2970401025 @qq .com) for time in morning noon afternoon evening do echo "This time is $time!" D one
退出,chmod 755 the-for2.sh
赋予执行权限,并 ./the-for2.sh
执行此脚本
for循环格式2 格式2:
1 2 3 4 for (( 初始值;循环控制条件;变量变化 )) do 程序 done
示例1: 从1加到100脚本;创建一个脚本文件/usr/local/myshell/the-for3.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 #! / bin/ bash #从1 加到100 # Author: eayyoung (E- mail:2970401025 @qq .com) s= 0 for (( i= 1 ;i<= 100 ;i= i+ 1 )) do s= $(( $s+ $i )) done echo "The sum of 1+2+…+100 is : $s"
退出,chmod 755 the-for3.sh
赋予执行权限,并 ./the-for3.sh
执行此脚本
示例2: 批量添加指定数量的用户;创建一个脚本文件/usr/local/myshell/the-for4.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #! / bin/ bash #批量添加指定数量的用户 # Author: eayyoung (E- mail:2970401025 @qq .com) Read - p "Please input user name: " - t 30 name Read - p "Please input the number of users: " - t 30 number Read - p "Please input the password of users: " - t 30 passwd #read键盘读取命令。详细参考《centos- shell基础- 变量》 if [ ! - z "$name" - a ! - z "$number" - a ! - z "$passwd" ] then y= $(echo $number | sed 's/[0-9]//g' ) if [ - z "$y" ] then for (( i= 1 ;i<= $number;i= i+ 1 )) do / usr/ sbin/ useradd $name$i & > / dev/ null echo $passwd | / usr/ bin/ passwd done fi fi
退出,chmod 755 the-for4.sh
赋予执行权限,并 ./the-for4.sh
执行此脚本
while循环
while循环语句 概述:
while 循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立才会停止。与for的固定循环有所不同。
格式1:
1 2 3 4 5 while [ 条件判断式 ] do 程序 done
示例1: 从1加到100脚本;创建一个脚本文件/usr/local/myshell/the-while1.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #! / bin/ bash #从1 加到100 # Author: eayyoung (E- mail:2970401025 @qq .com) i= 1 s= 0 while [ $i - le 100 ] #如果变量i的值小于等于100 ,则执行循环 do s= $(( $s+ $i )) i= $(( $i+ 1 )) done echo "The sum of 1+2+…+100 is : $s"
退出,chmod 755 the-while1.sh
赋予执行权限,并 ./the-while1.sh
执行此脚本
until循环 while循环语句 概述:
until循环与while循环相反,until循环只要条件满足条件判断式不成立则进行循环,并执行循环程序,一旦循环条件成立,则终止循环。
格式1:
1 2 3 4 until [ 条件判断式 ] do 程序 done
示例1: 从1加到100脚本;创建一个脚本文件/usr/local/myshell/the-until1.sh
,并进行编辑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #! / bin/ bash #从1 加到100 # Author: eayyoung (E- mail:2970401025 @qq .com) i= 1 s= 0 until [ $i - gt 100 ] #如果变量i的值大于100 ,则停止循环 do s= $(( $s+ $i )) i= $(( $i+ 1 )) done echo "The sum of 1+2+…+100 is : $s"
退出,hmod 755 the-until1.sh
赋予执行权限,并 ./the-until1.sh
执行此脚本