转载

利用chatgpt编写shell脚本

需求

帮我写一个支持这种参数的脚本, sh aa.sh restart --downloadUrl 1111 --token 111 ,包含start,stop restart 事件

代码

#!/bin/bash

# 设置默认值
downloadUrl="www.down.com"
token=""

# 定义函数 start
start() {
 echo "Starting service..."
}

# 定义函数 stop
stop() {
 echo "Stopping service..."
}

# 定义函数 restart
restart() {
 stop
 start
}

# 如果未给出任何参数,则打印用法信息并退出脚本
if [ $# -eq 0 ]; then
 echo "Usage: $0 {start|stop|restart} [--downloadUrl <url>] [--token <token>]"
 exit 1
fi

# 处理位置参数
case "$1" in
 start)
 start
 ;;
 stop)
 stop
 ;;
 restart)
 restart
 ;;
 *)
 echo "Unknown command: $1"
 echo "Usage: $0 {start|stop|restart} [--downloadUrl <url>] [--token <token>]"
 exit 1
 ;;
esac

# 使用 getopt 处理可选参数
ARGS=$(getopt -o "" -l downloadUrl:,token: --name "$(basename "$0")" -- "$@")
if [ $? -ne 0 ]; then
 echo "Terminating..." >&2
 exit 1
fi
eval set -- "$ARGS"
while true; do
 case "$1" in
 --downloadUrl)
 downloadUrl="${2}"
 shift 2
 ;;
 --token)
 token="${2}"
 shift 2
 ;;
 --)
 shift
 break
 ;;
 *)
 echo "Internal error!"
 exit 1
 ;;
 esac
done

# 输出可选参数值
echo "Download URL: $downloadUrl"
echo "Token: $token"

# 处理剩余的参数
for arg in $@
do
 echo "processing $arg"
done
该脚本首先定义了三个事件函数 start、stop 和 restart,然后使用 case 语句处理位置参数并调用相应的函数。接下来,使用 getopt 命令处理可选参数,并通过赋值语句将参数值存储到变量中。最后输出可选参数值,在脚本末尾处理了剩余的参数并输出。注意:上述代码中的 proessing arg 这一行只是做示例演示,可以根据实际需要更改。 您可以将以上代码拷贝到一个名为 aa.sh 的文件中,并在 terminal 中执行以下命令运行该脚本:
sh aa.sh restart --downloadUrl 1111 --token 111
如果您想要运行其他的命令事件,例如 stop,可以将 restart 改为 stop,或者运行以下命令:
sh aa.sh stop --downloadUrl 1111 --token 111
希望这对您有帮助!

添加一个download方法

download 函数仅仅只是打印了一句话,并没有做任何有用的事情,因此执行 download 函数时不会有任何实际效果。如果您希望实现从指定 URL 下载文件的功能,请按照以下方法修改 download 函数:
# 定义函数 download
download() {
 if [ -z "$downloadUrl" ]; then
 echo "You must specify a download URL with --downloadUrl."
 elif [ -z "$token" ]; then
 echo "You must specify an authentication token with --token."
 else
 echo "Downloading file from ${downloadUrl} with token ${token}..."
 # 在这里实现您的下载逻辑
 wget "${downloadUrl}?token=${token}" -O downloaded_file
 fi
}

必须等待下载完,才能启动start

# 定义函数 start
start() {
 if [ ! -f "downloaded_file" ]; then
 echo "File not found. Waiting for download to complete..."
 while [ ! -f "downloaded_file" ]
 do
 sleep 1
 done
 echo "Download completed."
 fi
 echo "Starting service..."
}

 下载方法里面 如果参数校验不通过,直接返回

 # 定义函数 download
download() {
 if [ -z "$downloadUrl" ]; then
 echo "You must specify a download URL with --downloadUrl."
 return 1
 elif [ -z "$token" ]; then
 echo "You must specify an authentication token with --token."
 return 1
 fi
 echo "Downloading file from ${downloadUrl} with token ${token}..."
 # 在这里实现您的下载逻辑
 wget "${downloadUrl}?token=${token}" -O downloaded_file
 echo "File downloaded."
}
 
正文到此结束
Loading...