目录
第一部分:Shell 脚本基础学习
1.1 什么是 Shell 脚本?
Shell 脚本是用来告诉操作系统执行一系列命令的小程序,通常由一个文本文件组成。它的优势在于可以自动化完成重复的任务,提升效率。
1.2. 基础命令
在学习 Shell 脚本之前,先掌握一些基础命令是很重要的。下面是一些常见的命令:
echo
: 用于打印文本到控制台,例如:echo "Hello, World!"
cd
: 改变目录,比如进入桌面:cd ~/Desktop
ls
: 列出当前目录中的文件和文件夹。touch
: 创建一个新文件,比如创建一个脚本文件:touch login.sh
chmod
: 修改文件权限,使脚本可以执行:chmod +x login.sh
1.3. 编写和执行第一个脚本
让我们来编写一个简单的 Shell 脚本:
- 打开终端并创建一个新的脚本文件:
touch hello.sh
- 编辑脚本文件,可以用编辑器如
nano
:nano hello.sh
- 在文件中写入以下内容:
#!/bin/bash echo "Hello, World!"
- 保存并退出编辑器(对于
nano
,可以按Ctrl + X
,然后按Y
保存)。 - 赋予脚本执行权限并运行:
你会看到输出:chmod +x hello.sh ./hello.sh
Hello, World!
第二部分:Shell 脚本的结构
- 注释:使用
#
开头的是注释,不会被执行,例如:# 这是一个注释
- 变量:可以用变量存储信息,例如:
name="Alice" echo "Hello, $name"
- 条件语句:判断逻辑可以用
if
语句:if [ "$name" == "Alice" ]; then echo "Welcome, Alice!" fi
- 循环:可以使用
for
循环来重复执行一些命令:for i in {1..5} do echo "Iteration $i" done
第三部分:实现校园网络自动登录脚本
这个脚本包含两个步骤:
- 关闭 Wi-Fi 代理:使用
networksetup
命令关闭代理。 - 自动登录校园网:通过你提供的
curl
命令完成校园网认证。
Step 1: 创建 Shell 脚本
首先,创建一个脚本文件,比如叫 campus_auto_login.sh
,并写入以下内容:
#!/bin/bash
# Step 1: 关闭 Wi-Fi 的代理
NETWORK_SERVICE="Wi-Fi"
# 关闭 HTTP 和 HTTPS 代理
networksetup -setwebproxy $NETWORK_SERVICE "" "0"
networksetup -setsecurewebproxy $NETWORK_SERVICE "" "0"
# 确保 SOCKS 代理也被关闭
networksetup -setsocksfirewallproxy $NETWORK_SERVICE "" "0"
echo "代理设置已关闭"
# Step 2: 登录校园网
USERNAME="你的用户名" # 请替换为你的校园网账号
PASSWORD="你的密码" # 请替换为你的校园网密码
LOGIN_URL="http://edu.cn/login.php"# 请替换为你的校园网地址
# 使用 curl 进行登录
curl -H "Content-Type: application/x-www-form-urlencoded" -X POST --data "opr=pwdLogin&userName=$USERNAME&pwd=$PASSWORD&rememberPwd=0" $LOGIN_URL
echo "已自动登录校园网"
补充
curl -H "Content-Type: application/x-www-form-urlencoded" -X POST --data "opr=pwdLogin&userName=$USERNAME&pwd=$PASSWORD&rememberPwd=0" $LOGIN_URL
这条 curl
命令用于发送一个 POST 请求,并带有指定的头信息和数据。让我们逐步解析每个部分的含义:
-
curl
:curl
是一个常用的命令行工具,用于向指定的 URL 发送请求并获取响应数据。
-
-H "Content-Type: application/x-www-form-urlencoded"
:- 这是一个 HTTP 请求头,指定请求体的内容类型。
application/x-www-form-urlencoded
表示发送的数据将以表单的方式进行编码,这种编码方式常用于 POST 请求中的表单提交。
- 这是一个 HTTP 请求头,指定请求体的内容类型。
-
-X POST
:- 这个参数指定请求的方式为
POST
,表示发送的数据是要传递给服务器的,而不是获取资源(通常通过GET
请求)。POST 请求通常用于提交数据。
- 这个参数指定请求的方式为
-
--data "opr=pwdLogin&userName=$USERNAME&pwd=$PASSWORD&rememberPwd=0"
:--data
指定 POST 请求的表单数据,数据的格式是键值对,多个键值对之间用&
分隔。opr=pwdLogin
: 这表示一个操作(operation)参数,值为pwdLogin
,用于告诉服务器当前进行的是密码登录操作。userName=$USERNAME
:userName
是用户名字段,值为$USERNAME
,这个值由外部的环境变量USERNAME
提供。pwd=$PASSWORD
:pwd
是密码字段,值为$PASSWORD
,这个值由外部的环境变量PASSWORD
提供。rememberPwd=0
: 这是一个布尔型参数,表示是否记住密码,0
通常表示不记住密码。
-
$LOGIN_URL
:- 这是请求的目标 URL,由环境变量
LOGIN_URL
提供。该 URL 代表服务器的登录接口。
- 这是请求的目标 URL,由环境变量
总结
这条 curl
命令通过 POST 请求向服务器提交表单数据,用于执行登录操作。请求的表单数据包括用户名、密码和记住密码选项(不记住)。请求的内容类型为 application/x-www-form-urlencoded
,是标准的表单提交格式。
Step 2: 赋予脚本执行权限
在终端中给脚本赋予执行权限,这样可以使它能够运行:
chmod +x campus_auto_login.sh
Step 3: 手动运行脚本
当你需要使用这个脚本时,可以手动运行:
./campus_auto_login.sh
这样会先自动关闭 Wi-Fi 代理,然后进行校园网的登录,整个过程应该几秒钟内完成。
如何自动化执行(可选)
如果你希望这个脚本能在每天特定时间自动运行,可以使用 cron
定时任务。
使用 cron
实现定时任务
你可以使用 cron
来每天自动运行这个脚本。例如,如果你想让它在每天早上 8 点自动运行,可以按照以下步骤操作:
-
编辑
cron
定时任务:crontab -e
-
在文件中添加以下行:
0 8 * * * /path/to/campus_auto_login.sh
- **0 8 * * ***:代表每天早上 8:00。
- /path/to/campus_auto_login.sh:请替换为你的脚本的实际路径。
这条 cron
命令会每天早上 8 点运行你的脚本,自动关闭代理并登录校园网。
总结
- 脚本功能:这个脚本会先关闭 Wi-Fi 的 HTTP、HTTPS 和 SOCKS 代理,然后使用提供的
curl
命令登录校园网。 - 自动化执行:你可以手动运行这个脚本,或者使用
cron
进行定时自动执行。