记录下我使用chatGPT写shell脚本的经过,一共生成了三个版本,每个版本都比前一个更精确,主要控制点在于对想要产物的描述精确度,只有越准确的描述,AI才能更好地生产。
第一版
运维监控脚本,分成三部分,分别显示所有pid的相关cpu使用情况、内存使用情况、磁盘使用情况。
这一版只有基本功能,输出也不好看。
1 2 3 4 5 6 7 8 9 10 11 12 13
| #!/bin/bash
# CPU usage echo "CPU usage:" ps aux | awk '{print $2, $3, $11}' | sort -k2rn | column -t
# Memory usage echo "Memory usage:" ps aux | awk '{print $2, $4, $11}' | sort -k2rn | column -t
# Disk usage echo "Disk usage:" df -h | awk '{print $1, $5}' | column -t
|

第二版
在此基础上,增加shell脚本输出美化,不显示cpu使用率为0,内存占用为0的进程。
这一次,让AI加一些美化,并且提出新的需求让其完成,可以看到,给出的结果工整了很多,而且完成了新提出的需求。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #!/bin/bash
# Define colors GREEN="\e[32m" YELLOW="\e[33m" BLUE="\e[34m" RED="\e[31m" RESET="\e[0m"
# CPU usage echo -e "${GREEN}CPU usage:${RESET}" ps aux | awk '{if($3!=0) print $2, $3, $11}' | sort -k2rn | awk '{printf "%-10s %-10s %s\n", $1, $2, $3}'
# Memory usage echo -e "\n${YELLOW}Memory usage:${RESET}" ps aux | awk '{if($4!=0) print $2, $4, $11}' | sort -k2rn | awk '{printf "%-10s %-10s %s\n", $1, $2, $3}'
# Disk usage echo -e "\n${BLUE}Disk usage:${RESET}" df -h | awk '{printf "%-10s %s\n", $1, $5}'
|

第三版
输入pid,获取对应进程的cpu使用情况、内存使用情况、磁盘使用情况。
这一次与前面的功能又不一样,加入了用户输入的环节,值得一提的是,只要在同一个对话中,AI是可以判断出所使用的相关环境,例如这里AI能判断出我们需要的是shell脚本。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #!/bin/bash
# Get options and arguments while getopts "p:" opt; do case $opt in p) pid=$OPTARG ;; \?) echo "Invalid option: -$OPTARG" >&2 exit 1 ;; :) echo "Option -$OPTARG requires an argument." >&2 exit 1 ;; esac done
# Check for required arguments if [[ -z $pid ]]; then echo "Please provide a valid process ID using the -p option." >&2 exit 1 fi
# CPU usage echo -e "\nCPU usage:" ps -p $pid -o pid,%cpu,cmd | grep --color=always $pid | column -t
# Memory usage echo -e "\nMemory usage:" ps -p $pid -o pid,%mem,cmd | grep --color=always $pid | column -t
# Disk usage echo -e "\nDisk usage:" lsof -p $pid | awk '{if($4 == "REG" || $4 == "DIR") sum += $7}; END {print sum/1024 " KB"}' | grep --color=always ".*" | column -t
|

总结
- 在对AI描述需求时,尽量准且,用书面语。
- 多用并且、同时等词语表示都需要的关系
- 在对前面生成不满意时,可以提出进一步需求,
就像甲方迫害乙方那样,例如让输出更美观一些,