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: 期待一元表达式
    • 解决方案:

      1. 当 if 语句中使用 [ ] 条件修饰符时, $TNT 变量必须加上引号。

      2. 当 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 变量名 in123
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 --stdin $name$i &>/dev/null
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 执行此脚本