一,for循环
1,for循环格式
for NUM in 1 2 3 for NUM in {1..3} for NUM in `seq 1 3` for NUM in {a..f} for NUM in {1..$a} 注意:这个a要么在脚本里面声明了,要么export提升到环境或用户或系统级别了 for ((A=1;A<=10;A++)) for NUM in `seq 1 2 10` 2表示步长,没写默认步长为1
for NAME in westos linux 666 也是可以的echo $NAME依次打印westos linux 666
注意:
exit是完全中断脚本
break是跳出整个循环,但是循环之外的还是执行
continue是跳出本次循环,进入下一次循环
return不能直接用
for循环可以传递参数,里面的for可以使用外面的for的变量
shell编程练习
1,查看网段里面连通的主机
###如果连通蓝色背景输出ip,如果不连通输出空行
测试
2,备份数据库linux,mysql,test,,westos,并且放在/mnt/maysql_backup里面
[root@100 mnt]# mysql -uroot -EN -e "show databases;" *************************** 1. row *************************** information_schema *************************** 2. row *************************** linux *************************** 3. row *************************** mysql *************************** 4. row *************************** performance_schema *************************** 5. row *************************** test *************************** 6. row *************************** westos
#!/bin/bash DATABASE_MESSAGE=`mysql -uroot -EN -e "show databases;" | grep -E "^\*|schema$" -v` 去掉以*开头和schema结尾的行 \对*转义 mkdir -p /mnt/mysql_dump for DATABASE_NAME in $DATABASE_MESSAGE !!!!这里直接对变量$DATABASE_MESSAGE做循环,linux,mysql,test,westos依次赋值给DATABASE_NAME do mysqldump -uroot $DATABASE_NAME > /mnt/mysql_dump/${DATABASE_NAME}.sql [ "$?" -eq "0" ] && { echo -e "\033[47m$DATABASE_NAME is backuped \033[0m" } done
测试
成功!!!
二,while循环
1,格式
while 条件
do
done
shell编程练习
uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。
使用whiel时实刷新uptime
####sleep表示延时 echo -n表示不换行
测试
成功!!!
####如何发邮件?
[root@localhost ~]# echo hello world | mail -s "nihao" root 非交互式 -s表示主题是nihao You have mail in /var/spool/mail/root [root@localhost ~]# mail 直接查看 Heirloom Mail version 12.5 7/5/10. Type ? for help. "/var/spool/mail/root": 2 messages 1 new 1 root Thu Jun 21 13:31 21/768 "nihao" >N 2 root Thu Jun 21 13:31 20/757 "nihao" & Message 2: From [email protected] Thu Jun 21 13:31:52 2018 Return-Path: <[email protected]> From: root <[email protected]> Date: Thu, 21 Jun 2018 13:31:52 -0400 To: [email protected] Subject: nihao User-Agent: Heirloom mailx 12.5 7/5/10 Content-Type: text/plain; charset=us-ascii Status: R hello world 邮件内容
shell编程练习
根分区的使用量达到了80%就给root用户法邮件报警
#!/bin/bash DISK_NUM=`df | awk '/\/$/{print $5}' | awk -F "%" '{print $1}'` \/是对\转义,打印以/结尾的行的第5列,然后以%为分隔符,打印第一列 while true do [ "$DISK_NUM" -ge "80" ] && { 如果大于80报警 echo "Your / will full !!! " | mail -s "warning" root } sleep 1 每隔1秒做一个while循环 done
测试
收到邮件!!!
shell编程练习
根分区的使用量达到了80%就直接在终端显示警告
[root@localhost ~]# ps PID TTY TIME CMD 3645 pts/1 00:00:00 bash 8101 pts/1 00:00:00 ps [root@localhost ~]# ps | awk '/bash$/{print $2}' 显示当前tty设备 pts/1
####直接显示在终端设备上
测试
成功!!!