常用的语句
exit直接退出
break退出当前循环,不影响其他
continue跳出本层循环,进入下一次循环
[root@desktop mnt]# vim test.sh
#!/bin/bash
for NUM in {1..5}
do
if
[ "$NUM" -eq 3 ]
then
$1
fi
echo $NUM
done
echo hello,westos!
[root@desktop mnt]# sh test.sh
1
2
3
4
5
hello,westos!
[root@desktop mnt]# vim test.sh
[root@desktop mnt]# sh test.sh exit
1
2
[root@desktop mnt]# sh test.sh break
1
2
hello,westos!
[root@desktop mnt]# sh test.sh continue
1
2
4
5
hello,westos!
(1)for语句
[root@desktop mnt]# vim for.sh
#!bin/bash
for NUM in `seq 1 2 10` #使用seq可以设置步长
do
echo $NUM
done
[root@desktop mnt]# sh for.sh
1
3
5
7
9
[root@desktop mnt]# vim for.sh
#!bin/bash
for NUM in {1..5} #相当于 `seq 1 5` , 也相当于((NUM=1;NUM<=5;NUM++))
do
echo $NUM
done
[root@desktop mnt]# sh for.sh
1
2
3
4
5
实验:显示教室中可连通的网络
[root@desktop mnt]# vim check_host.sh
#!/bin/bash
for IP in `seq 0 50`
do
ping -c1 -w1 172.25.254.$IP &> /dev/null && echo "172.25.254.$IP"
done
实验:备份数据库
[root@desktop mnt]# vim mysql_dump.sh
#!/bin/bash
DATABASE=`mysql -uroot -EN -e "show databases;"|grep -E "^\*|schema$" -v`
mkdir -p /mnt/mysql_dump
for DATABASE in $DATABASE
do
mysqldump -uroot $DATABASE > /mnt/mysql_dump/${DATABASE}.sql
[ "$?" -eq "0" ]&&{
echo -e "\033[32m$DATABASE is backuped!\033[0m"
}
done
[root@desktop mysql_backup]# sh mysql_dump.sh
linux is backuped!
mysql is backuped!
test is backuped!
westos is backuped!
(2)while do语句
while true
do
***
done
实验:当根分区使用量超过80%时,向root用户发送邮件警告
[root@desktop mnt]# vim root_check.sh
#!/bin/bash
COUNT=`df|awk -F " " '/\/$/{print $5}'|awk -F "%" '{print $1}'`
while true
do
[ "$COUNT" -ge "80" ]&&{
echo Your / is full!| mail -s warning root
}
sleep 1
done
[root@desktop ~]# mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/root": 3 messages 3 new
>N 1 root Mon Jun 18 05:07 18/601 "warning"
N 2 root Mon Jun 18 05:07 18/601 "warning"
N 3 root Mon Jun 18 05:07 18/601 "warning"
& q
You have mail in /var/spool/mail/root
[root@desktop ~]# > /var/spool/mail/root #清空邮件
实验:当根分区使用量超过80%时,在当前shell环境中显示
[root@desktop mnt]# vim root_check.sh
#!/bin/bash
COUNT=`df|awk -F " " '/\/$/{print $5}'|awk -F "%" '{print $1}'`
TTY=`ps $$|awk '/bash$/{print $2}'`
while true
do
[ "$COUNT" -ge "80" ]&&{
echo "Your / is full!" > /dev/$TTY
}
sleep 3
done