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

测试


成功!!!

二,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

####直接显示在终端设备上

测试

成功!!!

猜你喜欢

转载自blog.csdn.net/ha_weii/article/details/80767848