Skip to main content

常见bash脚本chatgpt释疑

对于一些日常中的脚本, 直接扔给chatgpt解释, 能得到非常详细的解释和适用说明. 如果自己去研究, 得翻很久的man文档, 翻完了也不知掉为什么要在这个场合里使用这个语句.

github上到处都是bash脚本, 照理来说用起来非常容易, 但是bash脚本晦涩难懂, 一般都得一边看一边翻文档, 还要一边在自己的系统里测试才行, 很多时候看懂了含义, 也不知道为什么要用在这里. 有了chatgpt, 门槛突然降到随都能写几句的层次了.

unset 语法和场景讲解

unset JMX_PORT
unset KAFKA_LOG4J_OPTS
unset KAFKA_HEAP_OPTS

picture 1

picture 2

随手生成代码并进行修改

随手就能举出代码例子, 更不可思议的是面对质疑, 竟然还能识别到前面对话中的代码错误, 然后进行修改. 这是一个文本概率生成器能做到的事情吗? 已经开始突破认知了. 同时也说明, chatgpt自己是能发现一些错误的, 但你不指出来, 他就不会修改.

picture 3

随手解释bash命令行参数替换

zk_conn=$(cat /etc/kafka/server.properties|grep zookeeper.connect=);zk_conn=${zk_conn#*=};echo $zk_conn

picture 4

查看当前文件夹

ROOT=$(cd $(dirname "$0") && pwd) 

picture 5

获取参数并输出执行命令

chatgpt竟然还能进行沟通修改, 简直不可思议.

使用 Bash 的 -x 选项来打印执行的命令。在脚本中加入 set -x 命令,就可以在执行每个命令时自动打印出命令本身和参数.

#!/bin/bash

set -x

docker pull $1

picture 6

bash 脚本遇到错误默认不会停止

bash 脚本遇到错误默认不会停止, 需要在开头设置-e变量, 遇到错误才会自动停止, 不会继续执行下面其他步骤.

set -e

picture 7

bash 备份文件夹并定期删除早期的文件夹

有了chatgpt后, 复杂的bash写法都能直接提供进行参考, 打工利器...

picture 8

set -e
max_backup_folders=3
deploy_folder="deploy"

echo "git pull at $(date)"
git pull

current_date=$(date +%Y-%m-%d)
echo "start build at ${current_date}"
npm run build
echo "build finish"

# 备份文件
if [ -d "deploy" ]; then
mv ${deploy_folder} "${deploy_folder}_${current_date}"
fi

mv build ${deploy_folder}
echo "move build stuff to deploy, build finished"

# 删除多余的备份文件
echo "check backup folder nums"
# 检查前缀为prefix的文件夹数量是否超过max_folders
folder_count=$(find . -maxdepth 1 -type d -name "${deploy_folder}_*" | wc -l)
if [ "$folder_count" -gt "$max_backup_folders" ]; then
# 如果文件夹数量超过max_folders,则删除最早创建的几个
folders_to_delete=$((folder_count - max_folders))
oldest_folders=$(find . -maxdepth 1 -type d -name "${deploy_folder}_*" -printf '%T+ %p\n' | sort | head -n "$folders_to_delete" | awk '{print $2}')
echo "folders to delete: ${oldest_folders}"
rm -rf $oldest_folders
fi
echo "cleanup finished"

# 检查文件夹大小
echo `du -sch deploy`

source命令

source命令原来是bash自带的命令, 可以用点替代.

source ~/.bashrc 可以用. ~/.bashrc替代.

source command not found in sh shell

https://stackoverflow.com/questions/13702425/source-command-not-found-in-sh-shell