根据 getopts 标志 bash 更改函数中的变量

问题描述

我有一个 bash 脚本,用于查找连接的设备并将串行端口输出记录到文件中。 我正在使用 getopts 来选择日志记录方法。 除了一行之外,两个函数是相同的。 我想将其更改为单个函数,其中包含不同的单行变量(我的尝试如下)但没有成功。我怎样才能用 getopts 做到这一点? 非常感谢。

#!/bin/bash
#script to capture camera serial port logs via usb or UART.

file_name='DashcamLog'
#Date e.g: 20210204T120159 (ISO 8601)
current_date=$(date +%Y%m%dT%H%M%S)
BAUDRATE='115200'
#change to reflect udev rules e.g /dev/h1*
BOARDS=(/dev/ttyUSB* /dev/ttyACM*)
screen="$(screen -Sdm $port_name -L -Logfile $new_file_name $i $BAUDRATE)"
minicom="$(screen -Sdm ${port_name} minicom -b ${BAUDRATE} -D ${i} -C ${new_file_name})"

usage() {
    echo "Usage:"
    echo "Use $0 -a to use GNU screen to automatically capture logs on USB plug in"
    echo "Use $0 -s to use GNU screen to capture logs WITHOUT automatic capture on USB plug in."
    echo "Use $0 -m to use minicom to capture logs WITHOUT automatic capture on USB plug in."

}

#detects current + new devices + automatically starts logging
autoStartLog() {

    while true;do

        current_date=$(date +%Y%m%dT%H%M%S)

        for i in $BOARDS; do

            port_name=${i#/dev/}

            if ! screen -ls | grep -o $port_name > /dev/null;then
                (
                    serial_no="$(udevadm info --attribute-walk $i | grep -m 1 ATTRS{serial})"
                    #file name e.g = DashcamLog_20210208T094013_peri_h1p1.log
                    new_file_name="${file_name}_${current_date}_${HOSTNAME}_${port_name}.log"
                    $screen
                    echo $port_name 'serial_no: ' $serial_no $new_file_name
                )
            fi

        done

    done

}

#detects current devices + starts logging using screen(-s)/minicom(-m)
startLog() {

    for i in $BOARDS; do
        (
            port_name=${i#/dev/}
            serial_no="$(udevadm info --attribute-walk $i | grep -m 1 ATTRS{serial})"
            new_file_name="${file_name}_${current_date}_${HOSTNAME}_${port_name}.log"
            $1
            echo $port_name 'serial_no: ' $serial_no $new_file_name
        )
    done

}


while getopts ":hmsa" opt; do
    case ${opt} in
        h)
          usage
          ;;

        a)
          autoStartLog
          ;;

        s)
          startLog $screen
          ;;

        m)
          startLog $minicom
          ;;

        \? )
          echo "Invalid Option: -$OPTARG" 1>&2
          usage
          exit 1
          ;;
    esac
done
shift $((OPTIND -1))

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)