当前位置: 首页 > article >正文

shell 接收长参数

以备份 mysql 脚本为例,如下

#!/bin/bash
# 分隔符
str="-"

# 定义分割线函数
FenGeLine() {
	## 获取屏幕宽度
	ScreenLen=$(stty size |awk '{print $2}')

	## 标题宽度
	TitleLen=$(echo -n $1 |wc -c)
	#echo $TitleLen
	## 左右分割线长度
	LineLen=$(((${ScreenLen} - ${TitleLen})/2))        # 一半长度,标题居中。

    if [ ${LineLen} -gt 0 ];then
        #echo $LineLen
	    # 打印分割线
	    yes ${str} |sed ''''${LineLen}'''q' |tr -d "\n" && echo -n $1 && yes ${str} |sed ''''${LineLen}'''q' |tr -d "\n" && echo
    else
        echo "$1"
    fi

}

# 定义短选项和长选项
SHORT_OPTS="h"
LONG_OPTS="help,host:,user:,port:,password:,db:,backfile:,"

# 解析命令行选项
PARSED_OPTS=$(getopt -o $SHORT_OPTS -l $LONG_OPTS -- "$@")
if [[ $? -ne 0 ]]; then
  exit 1
fi

# 将解析结果设置为位置参数
eval set -- "$PARSED_OPTS"



# 处理选项
while true; do
  case "$1" in
    -h|--help)
      echo "Usage: $0 [options]"
      echo "  -h, --help      Show help"
      echo "  --host connect mysql ip address"
      echo "  --user connect mysql user"
      echo "  --port connect mysql port"
      echo "  --password connect mysql password"
      echo "  --db backup mysql database"
      echo "  --backfile backup file"
      shift
      exit 0
      ;;
    --host)
      host="$2"
      shift 2
      ;;
    --user)
      user="$2"
      shift 2
      ;;
    --port)
      port="$2"
      shift 2
      ;;
    --password)
      password="$2"
      shift 2
      ;;
    --db)
      db="$2"
      shift 2
      ;;
    --backfile)
      backfile="$2"
      shift 2
      ;;
    --)
      shift
      break
      ;;
    *)
      echo "Invalid option: $1"
      exit 1
      ;;
  esac
done
host=${host:-localhost}
user=${user:-root}
port=${port:-3306}
password=${password:-123456}
backfile=${backfile:-/opt/mysql-${db}.sql}

FenGeLine "host 默认值为 localhost"
FenGeLine "user 默认值为 root"

FenGeLine "port 默认值为 3306"
FenGeLine "password 默认值为 123456"
FenGeLine "backfile 默认值为 /opt/mysql${db}.sql}"

FenGeLine "传入的 host 为 $host"
FenGeLine "传入的 user 为 $user"
FenGeLine "传入的 port 为 $port"
FenGeLine "传入的 password 为 $password"
FenGeLine "传入的 db 为 $db"
FenGeLine "传入的 backfile 为 $backfile"

if [ -z "$db" ];then
mysqldump  -h$host -u$user -P$port -p$password -A > $backfile
else
mysqldump  -h$host -u$user -P$port -p$password -B $db > $backfile
fi

http://www.kler.cn/a/404526.html

相关文章:

  • 3-22 ElementPlus:表单
  • 大数据挖掘期末复习
  • 【新人系列】Python 入门(十一):控制结构
  • P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles
  • 使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题
  • 【DBA攻坚指南:左右Oracle,右手MySQL-学习总结】
  • ROSSERIAL与Arduino IDE交叉开发(UBUNTU环境,包含ESP32、arduino nano)
  • 深入JMeter核心引擎:揭秘JmeterEngine、StandardJmeterEngine、ClientJmeterEngine与Remote的奥秘
  • 基于Matlab的变压器仿真模型的建模方法(3):单相双绕组变压器的拉氏变换象函数模型及其仿真模型
  • DockerFile与容器构建技术
  • Redis的String类型和Java中的String类在底层数据结构上有一些异同点
  • 大数据面试题每日练习--Hadoop是什么?它由哪些核心组件组成?
  • reactflow 中 useNodesState 模块作用
  • 如何在 RK3568 Android 11 系统上排查以太网问题
  • ESP8266 STA模式TCP服务器 电脑手机网络调试助手
  • Ubuntu问题 -- 允许ssh使用root用户登陆
  • 界面控件DevExpress Blazor UI v24.1新版亮点:发布全新文件输入等组件
  • 基于 GDAL 的 RPC 信息处理及影像校正相关操作实现
  • MQTT 服务器常用的有哪些?
  • RAG 示例:使用 langchain、Redis、llama.cpp 构建一个 kubernetes 知识库问答
  • 【计组】复习题
  • 【Linux驱动开发】使用异步通知来实现定时器非阻塞延时(实现应用层的定时器回调)
  • windows C#-异步返回类型(上)
  • JavaWeb——MySQL
  • Maven的安装——给Idea配置Maven
  • pytorch3d linux安装