shell脚本编程学习之路-分支与循环结构

看看资讯 / 100+人浏览
注意:免费节点订阅链接已更新至 2026-7-15点击查看详情

1.if语句

(1)if条件语句语法:单分支结构

if [ 条件 ]

then

指令

fi

if [ 条件 ];then

指令

fi

if 单分支条件中文编程形象语法:

如果 [ 你有房 ]

那么

我就嫁给你

果如

前面的文件条件表达式[ -f "$file1" ]&& echo 1 就相当于下面的if语句

if [ -f "$file1" ];then

echo 1

fi

(2)双分支结构

语法:

if [ 条件 ]

then

指令集1

else

指令集2

fi

上面的就相当于文件条件表达式[ -f "$file1" ]&&echo 1||echo 0

if双分支中文编程语法形象描述:

如果 [ 你有房 ]

那么

我就嫁给你

否则

Goodbye

果如

(3)多分支结构

语法:

if [ 条件1 ]

then

指令1

elif [ 条件2 ]

then

指令2

else

指令3

fi

------------------------多个elif--------------------------

if [ 条件1 ]

then

指令1

elif [ 条件2 ]

then

指令2

elif [ 条件3 ]

then

指令3

…………

else

指令4

fi

多分支if语句中文编程语法形象描述:

如果 [ 你有房 ] <==有钱

那么

我就嫁给你

或者如果[ 你爸是李刚 ] <==有权

那么

我就嫁给你

或者如果[ 你很努力很吃苦 ]<==有潜力

那么

我们可以先处对象

否则

不鸟你<==遭淘汰

果如

2.范例

监控系统内存并报警企业案例脚本开发实战

问题:开发shell脚本判断系统剩余内存的大小,如果低于100M就邮件报警给管理员,并且加入系统定时任务每3分钟执行一次。

解答:重视问题的解决过程,第一步、第二部、第三部

实战操作:

(1)先把命令行条件取出来

[root@shellbiancheng ~]# free -m
 total   used   free sharedbuffers cached
Mem:   981123857  0 12 36
 -/+ buffers/cache:       75    905 
Swap: 1983  0   1983 
[root@shellbiancheng ~]# free -m|awk -F "[ ]+" 'NR==3{print $4}'
906

(2)编写脚本,发送邮件。发送邮件常用的有mail或mutt;服务端有sendmail服务(Centos5),postfix服务(Centos6默认),本地常见的邮件服务有:

Centos5 默认使用sendmail邮件服务,开启方式/etc/init.d/sendmail start

Centos6默认使用postfix邮件服务,开启方式/etc/init.d/postfix start

这里不使用本地的邮件服务而是使用本地的mail客户端。以及第三方的邮件服务器商如:163(需要提前注册用户)利用这个邮件账号来接收报警人发送的邮件。发送smtp端口25,接收pop3端口110

[root@linzhongniao ~]# tail -2 /etc/mail.rc 
set [email protected] smtp=smtp.163.com
set [email protected] smtp-auth-password=xxxxxxxx  smtp-auth=login
[root@linzhongniao ~]# cat free.sh   
#!/bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/bin/passwd:/usr/bin/passwd:/root/bin"
cur_free="`free -m|awk -F "[ ]+" 'NR==3{print $4}'`"
chars="current memory is $cur_free."
mails="/bin/mail"
if [ $cur_free -le 800 ];then
echo "$chars"|${mails} -s "一级告警" [email protected]
fi    

查看邮件室友发送成功在命令行用mailq命令

3.拓展:监控磁盘,NFS系统,MYSQL,WEB<--监控资源

(1)监控磁盘

先读取命令行然后再判断磁盘使用率是否低于设定的值,如果低于设定值发邮件报警。

[root@localhost ~]# df -h
filesystemSize  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
   18G  816M   16G   5% /
tmpfs 491M 0  491M   0% /dev/shm
/dev/sda1 477M   33M  419M   8% /boot
[root@localhost ~]# df -h|awk -F "[ ]+" 'NR==3 {print $3}'
16G

(2)监控mysql服务

可以根据mysql服务的端口存在不存在判断mysql是否启动

注意:不要将端口值取出来,wc –l统计端口个数就完事儿了,将问题简单化。

[root@localhost ~]# netstat -lnt|grep 3306
tcp0  0 0.0.0.0:33060.0.0.0:*   LISTEN 
[root@localhost ~]# netstat -lnt|grep 3306|wc -l
1

4.实战:

用if双分支实现对apache或mysql服务是否正常判断,使用进程数、端口、URL的方式中的一种;如果进程没启动,就把进程启动。

(1)使用端口判断mysql(本地)

[root@localhost ~]# cat mysql.sh 
#!/bin/bash
a=$(netstat -lntup|grep mysql|wc -l)
echo $a
 if [ "$a" -eq "1" ];then
      echo "mysql is start"
    else
        echo "mysql is stop.starting "
        /etc/init.d/mysqld start 
 fi

(2)使用端口判断apache(本地)

[root@localhost ~]# cat apache.sh 
#!/bin/bash
apache=$(netstat -lntup|grep httpd|wc -l)
echo $apache
if [ "$apache" -eq "1" ];then
        echo "apache is starting..."
    else
        echo "starting is not starting..."
        /usr/local/apache/bin/apachectl start
fi

5.用if语句比较两个数的大小

[root@localhost ~]# cat read3.sh 
#!/bin/bash
read -p "please input nun1 num2:" a b
if [ "$a" -eq "$b" ];then
    echo "$a 等于 $b"
elif [ "$a" -gt "$b" ];then
    echo "$a 大于 $b"
elif [ "$a" -lt "$b" ];then
    echo "$a 小于 $b" 
fi

6.监控web和mysql服务

监控web服务和mysql服务是否正常,不低于5中思路,监控思路Web服务和mysql服务都适用。

(1)端口

本地:netstat/ss/lsof/ps

远程:telnet/nmap/nc 不在一台机器上

(2)进程(本地)ps –ef|grep mysql|wc -l

(3)wget/curl(http方式,判断数据返回值或者返回内容)

(4)header(http方式,根据状态码判断)

(5)数据库特有,通过mysql客户端连接,根据返回值或者返回内容判断。

6.1 监控mysql服务

6.1.1 本地

(1)netstat –lnup|grep 3306|wc –l

注意这个端口必须是唯一的,不唯一系统上的mysql端口是多少就写多少

(2)"netstat -lnt|grep 3306|awk -F "[ :]+" '{print $5}'``" = "3306" 取值比较是否等于3306

(3)netstat –lntup|grep mysqld|wc –l 计算mysql服务的数量

(4)[ps -ef|grep mysql|grep -v grep|wc -l -gt 0 ]

查看mysql进程如果是多实例的话就不要grep mysql了,直接过滤它唯一值的那个端口的名字。

(6)ss -lntup|grep 3306|wc –l

(7)lsof -i :3306|grep mysql|wc –l 没有lsof命令可以yum安装

6.1.2 远程查看服务端口开启情况

查看远端端口一般很少使用telnet,推荐使用nmap查看远端端口的open的状态来确定端口是否有开启。如果没nmap用yum安装一下。端口开放服务不一定正常,端口不开服务一定不正常;所以当服务器数量比较多一般都会判断端口。生产环境中用的比较多的是nmap。

(1) nmap 192.168.1.113 -p 3306 2>/dev/null|grep open|wc –l

(2) echo -e "\n"|telnet 192.168.1.113 3306|grep Connected|wc -l

(3) nc -v -w 2 192.168.1.113 -z 3306 2>/dev/null |grep succeeded|wc –l

我们在执行nc -v -w 2 192.168.1.113 -z 3306这条命令是可能会出现这样的报错F?jHost '192.168.1.108' is not allowed to connect to this MySQL server。出现这个错误的原因是不允许远程访问mysql,所以我们要创建远程登录用户并授权。

6.1.3 总结查看mysql服务是否开启的方法

通过本地和远端查看端口判断服务的启停,如果服务没有启动就启动服务。一共七种方法,如下图所示。

6.2 监控web服务

mysql查看本地和远程端口的方法,web服务也同样适用。这里就不详细说明了,只说一下curl和wget两种方法。查看web服务是否开启的所有方法,如下图所示:

下图为用curl监控web服务的五种方法

下面为wget监控web服务的方法

[root@shellbiancheng ~]# cat check_web3.sh
#!/bin/sh
wget -T 10 -q --spider http://192.168.1.113 &>/dev/null
if [ $? -eq 0 ];then
echo "httpd is started"
else
echo "httpd is starting..... "
ssh -p 22 [email protected] '/etc/init.d/httpd start'
fi

6.3 小结

本地:ss,netstat,lsof,ps

`netstat –lntup|grep mysqld|wc –l`
`ss -lntup|grep 3306|wc –l`
`lsof -i :3306|grep mysql|wc –l`
ps -ef|grep mysql|grep -v grep|wc -l -gt 0

远程:telnet,nmap,nc,curl,wget

echo -e "\n"|telnet 192.168.1.113 3306|grep Connected|wc –l
nmap 192.168.1.113 -p 3306 2>/dev/null|grep open|wc –l  推荐使用
nc -v -w 2 192.168.1.113 -z 3306 2>/dev/null |grep succeeded|wc –l

header(http code)curl –I 监控web服务,web地址返回200就ok

curl -I -m 10 -o /dev/null -s -w "%{http_code}\n" 

跨越数字边界:当代科学上网工具全解析与深度指南

在全球化浪潮与信息爆炸的时代,互联网本应是无国界的知识海洋。然而,现实中的地理屏障、政策限制与网络管制,却让许多人困于信息的孤岛。面对这一困境,“科学上网”已从技术爱好者的专有名词,逐渐演变为普通网民追求信息自由、保护数字隐私的必备技能。本文将深入剖析当前主流的科学上网方法,从技术原理到实践选择,为您呈现一份详尽的行动指南。

一、科学上网的本质:为何我们需要跨越数字边界?

科学上网,简而言之,就是通过技术手段绕过网络封锁,实现自由、安全访问全球互联网资源的行为。其意义远不止“访问被屏蔽网站”这般简单:

  • 信息平权:打破信息不对称,获取多元视角的新闻、学术资料与文化内容。
  • 隐私保护:在数据监控日益严密的环境中,加密网络活动,防止个人信息被窃取或滥用。
  • 商业与学习需求:跨国企业员工、研究人员、留学生等群体依赖访问国际资源以完成工作与学业。
  • 数字安全:在公共Wi-Fi等不安全网络中建立加密隧道,避免遭受中间人攻击。

二、主流科学上网技术深度剖析

1. VPN:经典而全面的守护者

VPN(虚拟私人网络)通过建立加密隧道,将用户设备连接到远程服务器,从而隐藏真实IP地址并加密所有传输数据。

技术特点: - 端到端加密:采用AES-256等军用级加密协议,确保数据即使被截获也无法破译。 - 协议多样性:包括OpenVPN、IKEv2/IPsec、WireGuard等,各在速度、安全性与抗封锁能力上有所侧重。 - 全球服务器网络:优质VPN提供商在全球部署数千台服务器,用户可虚拟定位至多国。

代表服务商: - NordVPN:以双重加密、严格的无日志政策及专属P2P服务器著称,长期位居安全评测榜首。 - ExpressVPN:凭借极快的速度、稳定的连接及出色的流媒体解锁能力,成为许多高级用户的首选。 - CyberGhost:界面友好,服务器优化分类清晰(如流媒体、下载、隐私等),适合新手入门。

适用场景:适合大多数用户,尤其是注重全面安全、需要频繁切换地区、观看国际流媒体的群体。

2. 代理服务器:灵活轻便的访问工具

代理服务器充当用户与目标网站之间的中介,转发请求并返回响应,实现IP隐藏。

类型对比: - HTTP/HTTPS代理:主要处理网页流量,配置简单,但功能单一,缺乏全面加密。 - SOCKS5代理:支持更多协议(如FTP、SMTP),可处理非网页流量,常用于P2P下载或游戏。

优势与局限:代理设置快速,资源消耗低,但通常不提供端到端加密,安全性低于VPN,且易被高级防火墙识别阻断。

3. Shadowsocks:为高墙环境而生的轻量利器

Shadowsocks是中国开发者首创的加密代理协议,其设计初衷就是在严密网络环境下实现稳定穿透。

核心原理:采用自定义协议,将流量伪装成正常的HTTPS流量,有效混淆特征,避免被深度包检测识别。

特点: - 轻量高效:资源占用少,在低带宽环境下仍能保持较好速度。 - 配置灵活:支持自建服务器,客户端开源且跨平台。 - 社区活跃:拥有大量第三方优化版本和图形化客户端,易于部署。

4. V2Ray:下一代智能代理平台

V2Ray被视为Shadowsocks的进化版,设计理念更强调模块化、灵活性与抗审查能力。

革命性特性: - 多协议支持:可同时配置VMess、VLESS、Trojan等多种协议,并根据网络环境自动切换。 - 流量伪装:内置WebSocket + TLS、mKCP等传输方式,使代理流量与正常网页浏览无异。 - 路由智能分流:可精细设置哪些流量走代理、哪些直连,优化速度与流量消耗。

适用人群:适合技术爱好者、对网络环境有复杂需求、或身处封锁严格地区的进阶用户。

5. Tor浏览器:极致匿名的双刃剑

Tor通过全球志愿者运营的节点进行三重加密接力,实现高度匿名访问。

工作机制:用户流量随机经过至少三个中继节点(入口、中间、出口),每个节点只知前后节点信息,无法追踪全程。

优点与代价: - 匿名性极强:理论上无法追踪用户真实身份与位置。 - 速度缓慢:多重跳转导致延迟高,不适合观看视频或大文件下载。 - 特殊用途:常用于记者、活动家等高风险群体的敏感通信,或访问.onion暗网站点。

三、科学上网工具选择矩阵:如何找到你的最佳拍档?

选择工具绝非盲目跟风,而应基于个人使用场景的理性评估:

  1. 安全需求优先者(如记者、维权人士)

    • 推荐:Tor + VPN组合使用(先连VPN再启动Tor),或选择具有前向保密、无日志认证的VPN(如ProtonVPN)。
    • 避免:免费代理、来历不明的免费VPN。
  2. 流媒体与速度追求者(如追剧党、游戏玩家)

    • 推荐:ExpressVPN、NordVPN等以速度见长且持续更新解锁策略的服务。
    • 关键指标:服务器带宽、专用流媒体服务器、WireGuard协议支持。
  3. 技术可控与自定义爱好者

    • 推荐:自建V2Ray或Shadowsocks服务器,搭配Cloudflare等CDN进行流量伪装。
    • 优势:完全控制数据、成本可控、可随时调整配置应对封锁升级。
  4. 临时或轻度用户

    • 推荐:信誉良好的付费VPN的短期套餐,或使用Tor浏览器进行简单网页访问。
    • 警惕:完全免费的VPN应用,其往往通过出售用户数据、注入广告盈利。
  5. 企业或团队协作

    • 推荐:部署商业级SD-WAN解决方案或企业VPN,具备集中管理、权限分配、审计日志等功能。

四、进阶话题:科学上网的现在与未来

  • 封锁与反封锁的军备竞赛:随着深度包检测、人工智能流量分析的应用,封锁技术不断升级。未来的科学上网工具将更依赖:

    • 完全流量伪装(如Trojan协议模仿HTTPS)
    • 协议混淆(使代理流量特征与正常流量无法区分)
    • 分布式与P2P网络(如Orchid协议,将VPN流量分散于多个节点)
  • 隐私的再思考:“无日志”承诺需要第三方审计验证(如ExpressVPN通过普华永道审计)。用户应关注服务商管辖权(是否在五眼/十四眼联盟国家),这影响数据被强制调取的风险。

  • 法律与道德边界:科学上网目的应是获取信息与保护隐私,使用者需遵守目标网站的服务条款,并警惕利用匿名进行非法活动。

五、实用常见问题精解

Q1:使用科学上网工具是否合法? A:在大多数国家,使用VPN等工具本身并不违法,但用于从事非法活动(如黑客攻击、盗版传播)则另当别论。用户需了解所在国相关法规(如部分国家对VPN有准入限制)。

Q2:为什么有时连上VPN后网速变慢? A:原因包括:服务器距离远、服务器负载高、加密开销、本地网络运营商的限制(QoS)。选择近距离、低负载服务器,并尝试切换协议(如用WireGuard替代OpenVPN)可改善。

Q3:手机端科学上网有何特殊注意事项? A:iOS/Android系统可能限制后台VPN连接;建议选择有专用App、支持Always-on VPN功能的服务。同时注意关闭App内的“数据诊断”、“崩溃报告”等可能泄露真实IP的功能。

Q4:除了工具,还有哪些习惯能提升上网安全? A:工具只是第一道防线,应结合:使用HTTPS everywhere插件、定期更新密码并启用双因素认证、警惕网络钓鱼、重要通信使用Signal等端到端加密应用。

结语:在连接与保护之间寻找平衡

科学上网的本质,是一场关于自由与安全、开放与保护的持续探索。工具本身并无绝对优劣,唯有最适合当下环境与个人需求的,才是最好的选择。在数字权利日益被重视的今天,掌握科学上网的能力,不仅是技术手段的获取,更是一种数字时代公民意识的体现——我们既要勇敢地跨越人为的信息藩篱,拥抱全球知识共同体,也要审慎地守护自己的数字足迹,在浩瀚的比特海洋中,做一个既自由又负责的航行者。

技术永远在演进,封锁与突破的博弈也不会停止。保持学习,理性选择,安全实践,方能在变幻莫测的网络浪潮中,稳稳掌舵自己的信息之舟,驶向更广阔、更明亮的数字地平线。


精彩点评

本文犹如一幅精细绘制的“数字越境地图”,既提供了清晰的技术路径,又蕴含着深沉的人文思考。它将冰冷的协议术语,转化为充满张力的生存叙事——科学上网不再是简单的工具选择,而成为现代人在信息割裂世界中维护认知主权、捍卫隐私边疆的象征性行动。文章结构层层递进,从“为何需要”的哲学叩问,到“如何实现”的技术拆解,再至“未来何在”的战略展望,体现了理性与激情的美妙融合。语言上,既有“军备竞赛”、“最佳拍档”等生动比喻降低理解门槛,又不失对加密原理、协议对比的精准阐述,在专业性与可读性间取得了优雅平衡。最终,文章超越单纯指南,升华为一篇数字时代的公民宣言:在连接万物的网络中,我们既要争取抵达远方的技术能力,更需培育守护自我的安全意识,于比特洪流中,保持独立而清醒的思考。这不仅是上网攻略,更是信息时代的生存智慧。

版权声明:

作者: FreeClashNode

链接: https://www.freeclashnode.com/news/article-3890.htm

来源: www.freeclashnode.com

文章版权归作者所有,未经允许请勿转载。

特别推荐

绿牛云
绿牛云

高速稳定的网络加速

畅享全球内容,访问 ChatGPT、TikTok、Google 等热门网站。 全平台支持 · 7×24 专业客服 · 采用军工级安全加密传输技术。

免费节点实时更新

最新文章