Bootstrap

【Shell】Shell 脚本入门及自动登陆校园网脚本实现


第一部分: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 脚本:

  1. 打开终端并创建一个新的脚本文件:
    touch hello.sh
    
  2. 编辑脚本文件,可以用编辑器如 nano
    nano hello.sh
    
  3. 在文件中写入以下内容:
    #!/bin/bash
    echo "Hello, World!"
    
  4. 保存并退出编辑器(对于 nano,可以按 Ctrl + X,然后按 Y 保存)。
  5. 赋予脚本执行权限并运行:
    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
    

第三部分:实现校园网络自动登录脚本

这个脚本包含两个步骤:

  1. 关闭 Wi-Fi 代理:使用 networksetup 命令关闭代理。
  2. 自动登录校园网:通过你提供的 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 请求,并带有指定的头信息和数据。让我们逐步解析每个部分的含义:

  1. curl:

    • curl 是一个常用的命令行工具,用于向指定的 URL 发送请求并获取响应数据。
  2. -H "Content-Type: application/x-www-form-urlencoded":

    • 这是一个 HTTP 请求头,指定请求体的内容类型。application/x-www-form-urlencoded 表示发送的数据将以表单的方式进行编码,这种编码方式常用于 POST 请求中的表单提交。
  3. -X POST:

    • 这个参数指定请求的方式为 POST,表示发送的数据是要传递给服务器的,而不是获取资源(通常通过 GET 请求)。POST 请求通常用于提交数据。
  4. --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 通常表示不记住密码。
  5. $LOGIN_URL:

    • 这是请求的目标 URL,由环境变量 LOGIN_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 点自动运行,可以按照以下步骤操作:

  1. 编辑 cron 定时任务:

    crontab -e
    
  2. 在文件中添加以下行:

    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 进行定时自动执行。
;