IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    dujun发表于 2024-06-27 23:21:00
    love 0

    我是一个上了年纪的守旧的程序员。现在也开始依赖 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



沪ICP备19023445号-2号
友情链接