shell编程中的常用语句|shell编程中的常用语句 for,while语句
一,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
测试
文章图片
成功!!!
注意:像这样的for DATABSE_NAME in $DATABASE_MESSAGE这样的很常用,这里的DATABASE_MESSAGE必须是已经显示在终端的列,这样写比较简单,但是要求不能有其他命令插在显示和for之间,也就是说如果是一个文件(userfile),那么这里要写for NAME in `cat userfile`!!!
二,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 rootThu Jun 21 13:3121/768"nihao"
>N2 rootThu Jun 21 13:3120/757"nihao"
&
Message2:
From root@localhost.localnameThu Jun 21 13:31:52 2018
Return-Path:
From: root
Date: Thu, 21 Jun 2018 13:31:52 -0400
To: root@localhost.localname
Subject: nihao
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain;
charset=us-ascii
Status: Rhello 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 TTYTIME CMD
3645 pts/100:00:00 bash
8101 pts/100:00:00 ps
[root@localhost ~]# ps | awk '/bash$/{print $2}'显示当前tty设备
pts/1
文章图片
####直接显示在终端设备上
测试
文章图片
【shell编程中的常用语句|shell编程中的常用语句 for,while语句】成功!!!
推荐阅读
- 热闹中的孤独
- Shell-Bash变量与运算符
- JS中的各种宽高度定义及其应用
- 我眼中的佛系经纪人
- 《魔法科高中的劣等生》第26卷(Invasion篇)发售
- Android中的AES加密-下
- 放下心中的偶像包袱吧
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗