07_Shell 编程_流程控制_if + case + for + while

流程控制

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变量

1
最后结尾处应该有个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
3

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"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值