文章目录
流程控制
1. if 语句
1.1 单分支 if 条件语句
if [ 条件判断式 ]; then
程序
fi
或者
if [ 条件判断式 ]
then
程序
fi
注意点:
- if 语句使用 fi 结尾,和一般语言使用大括号结尾不同
- [ 条件判断式 ] 就是使用 test 命令判断,所以中括号和条件判断式之间必须有空格。
- then 后面跟符合条件之后执行的程序,可以放在 [] 之后,用“;”分割。也可以换行写入,就不需要“;”了。
案例:判断分区使用率
#!/bin/bash 标记以下为shell语言。
# 统计根分区使用率
# Author:shenchao
# 把根分区使用率作为变量值赋予变量rate
rate=$(df -h | grep "dev/sda3" | awk '{print $5' | cut -d "%" -f1)
if [ $rate -ge 80 ]
then
echo "Warning! /dev/sda2 is full!!"
fi
cut -d "%" -f1
以 % 作为分隔符,提取第一列
1.2 双分支 if 条件语句
if [ 条件判断式 ]
then
条件成立时,执行的程序
else
条件不成立时,执行的另一程序
fi
案例:备份mysql数据库
#!/bin/bash
# 备份mysql数据库
# Author:sc
ntpdate asia.pool.ntp.org &>/dev/null
# 同步系统时间
data=$(date +%y%m%d)
# 把当前系统时间按照“年月日”格式赋予变量date
>200709
size=$(du -sh /var/lib/mysql)
# 统计mysql数据库的大小,并把大小赋予size变量
最后结尾处应该有个fi
。
案例:判断 apache 是否启动
#!/bin/bash
# Author:sc
port=$(nmap -sT 192.168.1.156 | grep tcp | grep http | awk '{print $2}'
# 使用nmap命令扫描服务器,并截取apache服务的状态,服务变量port
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
1.3 多分支 if 条件语句
if [ 条件判断式1 ]
then
当条件判断式1成立,执行程序1
elif [ 条件判断式2 ]
then
当条件判断式2成立,执行程序2
...
else
当所有条件都不成立,执行此程序
fi
2. case 语句
2.1 多分支 case 条件语句
case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和 if 多分支条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。
case $变量名in
"值1")
如果变量的值等于值1,则执行程序1
;;
"值2")
如果变量的值等于值2,则执行程序2
;;
...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac
#!/bin/bash
# 判断用户输入
# Author:sc
read -p "Please choose yes/no:" -t 30 cho
case $cho in
"yes")
echo "Your choose is yes!"
;;
"no")
echo "your choose is no!"
;;
*)
echo "Your choose is error!"
;;
esac
3. for 循环
3.1 语法一
for 变量 in 值1 值2 值3...
do
程序
done
for time in morning noon afternoon evening
do
echo "This time is $time!"
done
批量解压缩脚本
cd /lamp
ls *.tar.gz > ls.log
for i in $(cat ls.log)
do
tar -zxf $i &>/dev/null
done
rm -rf /lamp/ls.log
3.2 语法二
for ((初始值;循环控制条件;变量变化))
do
程序
done
从1加到100
s=0
for (( i=1;i<=100;i=i+1)
do
s=$(( $s+$i))
done
echo "The sum of 1+2+..+100 is:$s"
4. while 循环
4.1 while 循环
while 循环是不定循环,也称为条件循环。只要条件判断式成立,循环就会一直继续了,直到条件判断式不成立,循环才会停止。这和for的固定循环不太一样。
while [ 条件判断式 ]
do
程序
done
i=1
s=0
while [ $i -le 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is : $s"
4.2 untile 循环
until 循环,和 while 循环相反,until 循环时只要条件判断式不成立则进行循环,并执行循环程序。直到循环条件成立,终止循环。
i=1
s=0
until [ $i -gt 100 ]
do
s=$(( $s+$i ))
i=$(( $i+1 ))
done
echo "The sum is : $s"