小学电教检查网站建设资料,衡阳市建设局网站,网站建设工具哪家好,怎么通过所有的网站推广广告1.Shell概述
1.1 为什么要学习Shell
1.需要看懂运维人员编写的Shell程序
2.编写简单的Shell程序来管理集群#xff0c;提高开发效率
1.2 学习目标
了解开发语言的分类及其区别和Shell编程的适用场景掌握Bash特性、脚本规范、变量类型、变量运算掌握Bash流程控制、函数、数…1.Shell概述
1.1 为什么要学习Shell
1.需要看懂运维人员编写的Shell程序
2.编写简单的Shell程序来管理集群提高开发效率
1.2 学习目标
了解开发语言的分类及其区别和Shell编程的适用场景掌握Bash特性、脚本规范、变量类型、变量运算掌握Bash流程控制、函数、数组掌握Bash的并发编程及并发控制掌握Sed、Awk详细用法灵活运用Bash、Sed、Awk完成自动化运维工作
1.3 核心技能
Shell函数定义函数调用函数取消函数函数传参Shell数组定义数组查看数组数组切片遍历数组关联数组Bash并发及并发控制Expect编程功能解析适用场景功能详解grep命令解析正则表达式正则表达式定义基本元字符扩展元字符Sed精通Sed介绍适用常见Sed语法Sed选项Sed定址数字定址正则定址Sed子命令a、c、i、d、s、y、r、n、N、P、DSed工作模式模式空间保持空间置换子命令h、H、g、G、xawk精通工作流程print语句awk设计模式模式匹配记录和字段表达式:常量变量系统变量算术赋值关系布尔操作符流程控制条件语句循环语句循环控制Shell编程初识程序语言编程Shell定义分类适用范围初始化Shell脚本规范Shell脚本调试脚本运行方式变量类型自定义变量环境变量预定义变量位置变量变量运算变量引用变量长度命令置换变量替换test命令语法整数比较、字符串笔记文件比较Shell编程之条件结构if语句case语句Shell编程之循环结构for语句while语句until语句Shell循环控制shift,continue,break,exitBash特性命令补全历史命令别名前后台作业重定向管道命令排序执行通配符正则表达式脚本
1.4 学完可编写的案例(最后一章节提供脚本)
案例1利用Expect编写脚本实现自动化生成OpenSSH密钥对案例2编写多并发ping服务器脚本并对其进行并发控制案例3利用sed实现网络配置SSHD配置Nginx配置关闭SELinux案例4在/etc/sudoers配置文件中添加内容案例5将固定文件的内容添加到Nginx配置文件案例6Awk统计 /etc/password 各种Shell数量案例7Awk统计网站访问各种状态数量案例8Awk统计当前访问的每个IP的数量案例9统计Nginx日志中某一天的PV量案例10获取获得内容使用情况案例11基于时间戳的备份程序案例12编写系统初始化脚本案例13用shell编写LAMP环境一键部署脚本案例14用shell编写Linux系统状态收集及分析
1.5 认识Shell
Shell是一个命令行解释器它接收应用程序/用户命令然后调用操作系统内核。 Shell还是功能强大的编程语言易编写、易调试、灵活性强。
1.6 Shell语言的特点
Shell语言是指Unix操作系统的命令语言同时又是该命令语言的解析程序的简称。Shell本身是一个用C语言编写的程序它是用户使用Unix\Linux的桥梁用户的大部分工作都是通过Shell完成Shell语言既是一种命令语言又是一种程序设计语言。作为命令语言它交互地解释和执行用户输入的命令作为程序设计语言它定义了各种变量和参数并提供了许多在高级语言中才具有的控制结构包括循环和分支。它虽然不是Unix/Linux系统内核的一部分但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行深入了解和熟练掌握Shell的特性极其使用方法是用好Unix/Linux系统的关键。
1.7 Shell用途
自动化批量系统初始化程序update,软件安装时区设置安全策略…自动化批量软件部署程序(LAMP、LNMP、Tomcat、LVS、Nginx)应用程序管理(KVM、集群管理扩容、MySQL、DELLR720批量RAID)日志分析处理程序(PV、UV、200代码、200代码、top 100、gerp/awk)自动化备份恢复程序(MySQL完全备份/增量 Croud)自动化管理程序批量远程修改密码软件升级配置更新自动化信息采集及监控程序收集系统/应用状态信息CPUMemDiskNetTCP StatusApacheMySQL配合Zabbix信息采集收集系统/应用状态信息CPUMemDiskNetTCP StatusApacheMySQL自动化扩容增加运主机–业务上线zabbix监控CPU 80% |-50% Python API AWS/EC2(增加/删除云主机) Shell Script(业务上线)
2. Shell执行方式
方式一bash test.sh
方式二sh test.sh
方式三 . test.sh
方式四 source test.sh
演示如下 如图可以看到sh命令其实是一个软链接程序在/usr/bin下的sh程序文件类型是l,链接到了bash文件所以这两种执行方式其实的一种。 2.1 多种执行方式的区别
方式一和方式二是子shell一个独立环境。
方式三和方式四是本shell是当前环境。 演示如下
如图可以发现方式一方式二是开了虚拟环境运行运行之后会退出虚拟环境不影响当前环境
方式三和方式四是在本身的shell环境运行运行之后会影响当前环境。
3. Shell解析器的位置 备注因为Linux的系统类型问题方式二不生效。CentOS里面两个方式都可运行
4.变量
4.1 什么是变量
用一个固定的字符串去表示不固定的内容便于修改。
4.2 自定义变量
用户自定义变量是最常用的变量类型其特点是变量名和变量值都是由用户自由定义的
定义变量变量名变量值
引用变量$变量名
查看变量echo $变量名;
取消变量unset 变量名;
示例如图 变量的定义规则
变量名不能以数字开头等号左右两侧不能有空格变量的值如果有空格必须用引号包含
4.2.1 重复定义变量
一般情况下重复定义变量会覆盖之前的变量值如何进行重复定义变量值的叠加呢 如上图所示进行变量的叠加时变量名需要用双引号或者${}包含。
4.3 查看所有变量
查看所有变量:
set如图所示会出现系统中所有的变量信息。
要查询特定变量可以加管道查询:
set | grep 变量名4.4 变量的删除
unset 变量名4.5 案例测试主机在线的脚本
编写测试主机在线的脚本当主机在线提示在线当主机不在线提示不在线。
直接vim ping.sh,里面内容编写如下 参数解释
ping 测试命令
-c1 c是count的缩写次数统计一次
$ /dev/null 输出重定向将不想看的内容重定向到垃圾桶里 上述脚本解释为前面ping命令执行成功时的操作
|| 上述脚本解释为前面ping命令执行失败的操作
补全脚本增加变量后完整写法 4.6 交互定义变量
read 变量名read命令指从键盘读取变量值
一般加参数-p使用p代表print打印后面的内容会给用户看到 继续优化ping.sh 4.7 定义变量或者引用变量的注意事项
三种引号的区别 弱引用只能转义一些常用的空格只是起到了一个分割的作用$符号转义不了比较常用
’ ’ 强引用在单引号之内的所有特殊符号都将失去它本身的含义 优先执行用在当我们把有些命令用在一起希望有些命令的结果成为其他命令的参数的时候
效果展示如下
变量注意事项
变量名和等号直接不能有空格这可能和你熟悉的所有编程语言都不一样。同时变量名的命名须遵循如下规则
命名只能使用英文字母数字和下划线首个字符不能以数字开头。中间不能有空格可能使用下划线(_)。不能使用标点符号。不能使用bash里面的关键字(可用help命令查看保留关键字)
4.8 整数运算
方法一 expr $num1 $num2
补充 加 - 减 \* 乘*是任意字符使用\转义一下 / 除 % 取余
方法二$(())
方法三$[]
方法四let示例如图
案例制作脚本sum.sh计算总成绩
参数echo -n 表示不换行输出 直到遇到下一个回车符才会换行
四种方法的示例 注意 i 表示从1开始自增后面常用来计数
4.9 小数运算
安装计算机程序bc
计算机程序 bc 是一个用于数学计算的命令行计算器工具。它可以进行基本的数学运算如加减乘除、复杂的数学表达式计算、逻辑运算、函数计算等。bc 支持任意精度的数字计算可以处理大量数据并提供高精度计算结果。
在命令行中使用 bc 可以进行各种数学运算是一个非常方便的工具特别适合在脚本或命令行环境下进行数学计算。通过输入表达式或者脚本文件你可以利用 bc 进行各种数学运算从简单的计算到复杂的数学公式都可以轻松应对。
如果是CentOS系统可用命令
yum install -y bc-y 选项的作用是在运行命令时自动回答 “yes”即在安装软件包时不需要手动确认。这样可以避免在安装过程中出现需要用户确认的提示使整个安装过程自动化特别适用于批量安装或脚本中的使用。
如果是Debian系统可用命令
sudo apt-get update
sudo apt-get install bc安装如图所示
示例
当用于shell脚本中时可以通过将表达式传递给bc来进行数学计算。以下是一个简单的shell脚本示例演示如何在shell脚本中使用bc执行数学计算
#!/bin/bash# 定义两个变量
num110
num220# 使用bc计算两个变量的和
sum$(echo $num1 $num2 | bc)echo Sum of $num1 and $num2 is: $sum在这个例子中我们定义了两个变量 num1 和 num2然后使用 bc 计算它们的和并将结果存储在 sum 变量中。最后打印出这两个数字的和。
你可以将以上代码保存到一个名为 calc.sh 的文件中赋予执行权限chmod x calc.sh然后在终端中运行 ./calc.sh 来执行这个脚本并查看计算结果。这只是一个简单示例实际上你可以根据需要编写更复杂的脚本来使用 bc 进行各种数学计算。
4.10 环境变量 pstreepstree 是一个用于显示进程树的命令行工具它以树状结构的方式展示系统中运行的进程及其关系。通过 pstree 命令你可以清晰地看到进程之间的父子关系以及进程的层级结构。
使用 pstree 命令的基本语法是
pstree [OPTIONS] [PID]OPTIONS 是一些可选参数用于控制 pstree 的输出格式。PID 是指定的进程ID如果未提供则默认显示当前进程及其子进程的树状结构。
一些常用的 pstree 参数包括
-p显示进程ID。-u显示进程的拥有者。-n按照进程ID排序。-h高亮显示当前进程。-a显示命令行参数。
例如你可以在终端中输入 pstree -p 来显示当前进程及其子进程的树状结构其中会包含每个进程的进程ID。你也可以查看 man pstree 获取更多关于 pstree 命令的详细信息和其他可用选项。
在CentOS中的安装办法
在 CentOS 中安装 pstree 命令也非常简单。pstree 命令通常包含在 psmisc 软件包中因此你可以按照以下步骤在 CentOS 中安装 pstree
使用 yum 命令更新软件包索引 sudo yum check-update安装 psmisc 软件包其中包含了 pstree 命令 sudo yum install psmisc安装完成后尝试运行 pstree 命令 pstree
Debian 系统
在 CentOS 中安装 pstree 命令也非常简单。pstree 命令通常包含在 psmisc 软件包中因此你可以按照以下步骤在 CentOS 中安装 pstree
使用 yum 命令更新软件包索引 sudo yum check-update安装 psmisc 软件包其中包含了 pstree 命令 sudo yum install psmisc安装完成后尝试运行 pstree 命令 pstree
安装后效果如下 虽然bash都一样但进程之间是有父子关系的 两种声明方式 常用知识点
想使变量在当前用户登录后一直生效可以将变量放到~/.bash_profile
想使变量在所有用户登陆后一直生效可以将变量放到/etc/profile
不同服务器运行的bash是兄弟级别的shell,不是父子级别的shell
那么兄弟级别的shell变量如何传递
在 Linux 系统中如果想要设置一个变量在用户登录后一直生效可以按照以下方式进行设置
对于当前用户在 ~/.bash_profile 文件中添加变量设置。打开 ~/.bash_profile 文件如果不存在则可以新建然后在文件中添加类似如下的语句 export YOUR_VARIABLEyour_value对于所有用户在 /etc/profile 文件中添加变量设置。打开 /etc/profile 文件然后在文件中添加类似如下的语句 export YOUR_VARIABLEyour_value
这样设置的变量会在用户登录后一直生效对于当前用户放在 ~/.bash_profile对于所有用户放在 /etc/profile。记得在设置完毕后要重新加载配置文件或者注销再登录才能使变量生效。
常用场景
设置环境变量在用户登录后一直生效的常用场景包括
自定义环境变量你可以在 ~/.bash_profile 中定义自己的环境变量比如指定特定程序的路径、配置文件的位置等等。修改路径通过修改 PATH 环境变量你可以添加自定义的程序路径使得系统可以直接识别并执行这些程序。设置代理如果需要在用户登录后一直使用代理你可以将代理配置信息写入 ~/.bash_profile。
对于在所有用户登录后一直生效的场景通常用于设置系统范围的环境变量比如
全局路径设置将常用程序的路径添加到 PATH 环境变量中让所有用户都可以直接执行这些程序。系统级代理设置对于需要整个系统使用代理的情况可以在 /etc/profile 中进行代理配置。全局配置设置全局的环境变量用于系统级的配置需求。
总之通过在 ~/.bash_profile 和 /etc/profile 中设置环境变量你可以确保这些变量在用户登录后一直生效为用户和系统提供统一的环境。
操作演示效果如下
因为系统版本不同CentOS叫做.bash_profile文件Debian里面是.profile文件
在 CentOS 中用户的环境变量通常可以在 ~/.bash_profile 文件中进行设置全局的环境变量则可以在 /etc/profile 文件中进行设置。这两个文件对应的路径如下
用户级配置文件~/.bash_profile系统级配置文件/etc/profile
通过编辑这两个文件你可以设置用户级和系统级的环境变量以确保它们在用户登录后一直生效。
在 Debian 系统中用户级和系统级的环境变量设置方式与 CentOS 稍有不同。在 Debian 系统中你可以按照以下方式设置环境变量
用户级环境变量 对于单个用户可以在 ~/.bashrc 或 ~/.profile 文件中设置用户级环境变量。如果希望环境变量对所有交互式 shell 都可用通常建议将其添加到 ~/.bashrc 文件中。 系统级环境变量 在 Debian 系统中全局环境变量通常被设置在 /etc/environment 文件中。你也可以在 /etc/profile 或 /etc/bash.bashrc 中设置系统级环境变量。
因此在 Debian 系统中你可以根据需要选择合适的文件来设置用户级和系统级的环境变量。记得在修改配置文件后需要重新登录用户或重新加载配置文件才能使环境变量生效。
查看系统自带的环境变量
env4.11 位置变量和预定义变量
在 Shell 脚本中位置变量Positional Parameters和预定义变量Predefined Variables是很常用的概念它们可以帮助你在脚本中处理参数和获取系统信息。
位置变量Positional Parameters 位置变量是指在执行脚本时传递给脚本的参数在脚本内部可以通过 $1、$2、$3 等方式来引用这些参数。$1 表示第一个参数$2 表示第二个参数依此类推。如果参数超过 9 个需要使用花括号将数字包裹如${10}。使用 “$” 可以引用所有的位置变量。
示例
#!/bin/bashecho The first parameter is: $1
echo The second parameter is: $2
echo All parameters are: $预定义变量Predefined Variables 预定义变量是指在 Shell 中预先定义好的一些特殊变量包括但不限于 $0脚本本身的名称。$$当前脚本的进程 ID。$*当前脚本的所以的参数。$#当前脚本的参数的个数。$?上一个命令的退出状态返回值0是成功非零是失败。$USER当前用户的用户名。$HOME当前用户的主目录路径等等。 这些变量提供了访问脚本运行环境和系统信息的便利方式。
示例
#!/bin/bashecho The script name is: $0
echo The process ID is: $$
echo The exit status of last command is: $?
echo The current user is: $USER
echo The home directory is: $HOME通过合理地使用位置变量和预定义变量你可以更灵活地处理参数、获取系统信息提升 Shell 脚本的功能和效率。
4.12 案例用户制作输入成绩脚本
案例1 案例2
可以看出read和位置变量场景都可以通用没有优先级的区别。位置变量不是程序设计的唯一方法比如read也可以。
优化sum.sh脚本 4.13 变量章节重点案例脚本
1.用于自动创建用户并设置初始密码的脚本
你可以使用以下 Shell 脚本编写一个用于自动创建用户并设置初始密码的脚本。在这个脚本中我们将使用 useradd 命令来创建用户并结合 echo 和 passwd 命令来设置用户的初始密码。
#!/bin/bash# 提示输入新用户的用户名
read -p 请输入要创建的新用户的用户名: username# 使用 useradd 命令创建新用户
useradd $username# 提示输入初始密码并使用 passwd 呑令设置密码
read -s -p 请输入初始密码: password
echo -e $password\n$password | passwd $usernameecho 用户 $username 创建成功并已设置初始密码。这个脚本的工作流程如下
提示用户输入要创建的新用户的用户名。使用 useradd 命令创建新用户。提示用户输入初始密码并使用 passwd 命令设置密码给新创建的用户。最后输出提示信息表示用户创建成功并设置了初始密码。
使用上述脚本你可以方便地自动创建用户并设置初始密码。记得在运行脚本之前确保脚本有执行权限可以使用 chmod x script.sh 给予执行权限然后在终端中运行该脚本即可。
2.CentOS系统编写脚本配置本地yum源
要编写一个脚本来配置本地的 YUM 源你可以创建一个 Shell 脚本其中包含添加、启用和更新 YUM 源的步骤。以下是一个简单的示例脚本
#!/bin/bash# 备份原始yum源配置文件
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak# 创建新的yum源配置文件
cat /etc/yum.repos.d/local.repo EOF
[local]
nameLocal Yum Repository
baseurlfile:///path/to/your/local/repo
enabled1
gpgcheck0
EOF# 清除旧的yum缓存
yum clean all# 更新yum源
yum makecache在这个脚本中
首先备份了原始的 CentOS yum 源配置文件假设你使用的是 CentOS 操作系统。创建了一个新的 YUM 源配置文件 local.repo其中包含了本地 YUM 源的信息你需要将 /path/to/your/local/repo 替换为你实际的本地 YUM 源路径。清除了旧的 yum 缓存。最后更新了 yum 源。
记得在运行脚本之前将脚本中的 /path/to/your/local/repo 替换为你实际的本地 YUM 源路径并确保脚本有执行权限可以使用 chmod x script.sh 给予执行权限然后在终端中运行该脚本即可。
Debian 系统编写脚本配置本地yum源
如果你想在 Debian 系统上配置本地的 APT 源你可以使用以下类似的 Shell 脚本来实现
#!/bin/bash# 备份原始的源列表文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak# 创建新的源列表文件
cat /etc/apt/sources.list EOF
deb file:///path/to/your/local/repo/ buster main
EOF# 更新软件包列表
apt update在这个脚本中
首先备份了原始的 APT 源列表文件。创建了一个新的源列表文件 sources.list其中包含了本地 APT 源的信息你需要将 /path/to/your/local/repo/ 替换为你实际的本地 APT 源路径和版本信息比如 buster 是 Debian 10 的代号。使用 apt update 命令更新软件包列表。
记得在运行脚本之前将脚本中的 /path/to/your/local/repo/ 替换为你实际的本地 APT 源路径和版本信息确保脚本有执行权限可以使用 chmod x script.sh 给予执行权限然后在终端中运行该脚本即可。
下一节讲流程控制 文章转载自: http://www.morning.rdlxh.cn.gov.cn.rdlxh.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.wlggr.cn.gov.cn.wlggr.cn http://www.morning.rwpjq.cn.gov.cn.rwpjq.cn http://www.morning.hqsnt.cn.gov.cn.hqsnt.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.qytyt.cn.gov.cn.qytyt.cn http://www.morning.gwwtm.cn.gov.cn.gwwtm.cn http://www.morning.prgnp.cn.gov.cn.prgnp.cn http://www.morning.gbtty.cn.gov.cn.gbtty.cn http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn http://www.morning.qjsxf.cn.gov.cn.qjsxf.cn http://www.morning.wcghr.cn.gov.cn.wcghr.cn http://www.morning.simpliq.cn.gov.cn.simpliq.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.nlqgb.cn.gov.cn.nlqgb.cn http://www.morning.mjtgt.cn.gov.cn.mjtgt.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.mprtj.cn.gov.cn.mprtj.cn http://www.morning.rfwrn.cn.gov.cn.rfwrn.cn http://www.morning.wrlff.cn.gov.cn.wrlff.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.lxhgj.cn.gov.cn.lxhgj.cn http://www.morning.hcsnk.cn.gov.cn.hcsnk.cn http://www.morning.mnkz.cn.gov.cn.mnkz.cn http://www.morning.fpryg.cn.gov.cn.fpryg.cn http://www.morning.pqcsx.cn.gov.cn.pqcsx.cn http://www.morning.pbxkk.cn.gov.cn.pbxkk.cn http://www.morning.mzwqt.cn.gov.cn.mzwqt.cn http://www.morning.zrjzc.cn.gov.cn.zrjzc.cn http://www.morning.niukaji.com.gov.cn.niukaji.com http://www.morning.tsxg.cn.gov.cn.tsxg.cn http://www.morning.pakistantractors.com.gov.cn.pakistantractors.com http://www.morning.yhdqq.cn.gov.cn.yhdqq.cn http://www.morning.hsrpr.cn.gov.cn.hsrpr.cn http://www.morning.ghryk.cn.gov.cn.ghryk.cn http://www.morning.tmsxn.cn.gov.cn.tmsxn.cn http://www.morning.qbrdg.cn.gov.cn.qbrdg.cn http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn http://www.morning.jbgzy.cn.gov.cn.jbgzy.cn http://www.morning.ldhbs.cn.gov.cn.ldhbs.cn http://www.morning.qfnrx.cn.gov.cn.qfnrx.cn http://www.morning.kjcfz.cn.gov.cn.kjcfz.cn http://www.morning.rjmg.cn.gov.cn.rjmg.cn http://www.morning.lkthj.cn.gov.cn.lkthj.cn http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn http://www.morning.hqllx.cn.gov.cn.hqllx.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.mxmdd.cn.gov.cn.mxmdd.cn http://www.morning.jbblf.cn.gov.cn.jbblf.cn http://www.morning.huarma.com.gov.cn.huarma.com http://www.morning.xbmwh.cn.gov.cn.xbmwh.cn http://www.morning.kfbth.cn.gov.cn.kfbth.cn http://www.morning.jrqw.cn.gov.cn.jrqw.cn http://www.morning.plflq.cn.gov.cn.plflq.cn http://www.morning.hkchp.cn.gov.cn.hkchp.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.rwbh.cn.gov.cn.rwbh.cn http://www.morning.clnmf.cn.gov.cn.clnmf.cn http://www.morning.rtjhw.cn.gov.cn.rtjhw.cn http://www.morning.kcsx.cn.gov.cn.kcsx.cn http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn http://www.morning.qysnd.cn.gov.cn.qysnd.cn http://www.morning.qbzfp.cn.gov.cn.qbzfp.cn http://www.morning.hjbrd.cn.gov.cn.hjbrd.cn http://www.morning.cbpkr.cn.gov.cn.cbpkr.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.bdsyu.cn.gov.cn.bdsyu.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.dswtz.cn.gov.cn.dswtz.cn http://www.morning.qgmwt.cn.gov.cn.qgmwt.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn http://www.morning.mkbc.cn.gov.cn.mkbc.cn http://www.morning.pznnt.cn.gov.cn.pznnt.cn http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn http://www.morning.gbgdm.cn.gov.cn.gbgdm.cn http://www.morning.c7630.cn.gov.cn.c7630.cn http://www.morning.brps.cn.gov.cn.brps.cn