杜郎俊赏 - dujun.io

第一次体验 AI 自然语言编程

我是一个上了年纪的守旧的程序员。现在也开始依赖 AI 工具,主要是翻译、做图、查一些代码语法和示例。但我从未尝试直接用 AI 写代码,或许这是在自己专业领域被挑战的防御心理,一种莫名的排斥。不过今晚破例了,因为我要写一个 shell 代码,而我不熟练,所以抱着试试看的心态,用自然语言向 AI 提了需求。我的提问内容是:

用shell 代码实现下列功能:

接收一个输入值作为用户名,记为 name。
生成一个 10000 到 65535 之间的随机数作为端口号,记为 port,如果当前目录下有子目录名末尾含这个 port,则重新生成一次。
最终的目录名为 www_slim_web_ + name + _ + port。
创建这个目录,进入这个目录并创建一个 docker-compose.yml,模版为:

version: '2.4'

services:
  web:
    image: dujunio/www-slim-web
    volumes:
      - wwwroot:/wwwroot
      - db:/var/lib/mysql
    environment:
      - BURNTIME=1720232352
    ports:
      - "1611:80"
    tty: true
    container_name: www-slim-web

volumes:
  wwwroot:
  db:

将其中的 1611 替换为 port,container_name 替换为目录名。

最后执行 docker-compose up -d

AI 给出的回答是:

#!/bin/bash

# 读取输入值作为用户名
read -p "请输入用户名: " name

# 生成一个10000到65535之间的随机数作为端口号
port=$((RANDOM % 55536 + 10000))

# 检查当前目录下是否有子目录名末尾含这个端口号
while true; do
    # 获取当前目录下的所有子目录名
    directories=$(ls -d www_slim_web_* 2>/dev/null)

    # 检查每个子目录名是否以端口号结尾
    for dir in $directories; do
        # 获取目录名中的端口号部分
        dir_port=${dir##*_}

        # 检查目录名中的端口号是否与生成的端口号相同
        if [[ $dir_port == $port ]]; then
            # 如果相同,则重新生成端口号
            port=$((RANDOM % 55536 + 10000))
            break
        fi
    done

    # 如果没有找到以端口号结尾的子目录名,则退出循环
    if [[ ! $directories =~ $port ]]; then
        break
    fi
done

# 创建目录
mkdir "www_slim_web_${name}_${port}"

# 进入新创建的目录
cd "www_slim_web_${name}_${port}"

# 创建 docker-compose.yml 文件
cat > docker-compose.yml << EOF
version: '2.4'

services:
  web:
    image: dujunio/www-slim-web
    volumes:
      - wwwroot:/wwwroot
      - db:/var/lib/mysql
    environment:
      - BURNTIME=1720232352
    ports:
      - "${port}:80"
    tty: true
    container_name: www_slim_web_${name}_${port}

volumes:
  wwwroot:
  db:
EOF

# 执行 docker-compose up -d
docker-compose up -d

# 输出最终的目录名和端口号
echo "创建的目录为: www_slim_web_${name}_${port}"
echo "使用的端口号为: ${port}"

上述功能看似简单,其实涉及很多个语法,我自己写需要具体调试很多个片段。AI 写的代码我验证了是正确的。我的脑袋空白了几息,最后闪过的是《猩球崛起2》结尾凯撒的那句话。

The war has already began.

注:文中所用工具为海螺AI网页版 https://hailuoai.com

标签: AI
日期:2024-06-27