AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[getopts](unix)

Martin Hope
Amit Kr. Ratewal
Asked: 2022-10-08 01:03:45 +0800 CST

超过 4 个解析器参数的 getopts

  • 3

我想使用下面的代码在脚本中解析多个getopts参数bash。

while getopts b:B:m:M:T flag
do
    case "${flag}" in
        b) rbmin=${OPTARG};;
        B) rbmax=${OPTARG};;
        m) mbmin=${OPTARG};;
        M) mbmax=${OPTARG};;
        T) sigType=${OPTARG};;
    esac
done
echo $rbmin,$rbmax,$mbmin,$mbmax, $sigType
[amit@amitk]$ sh pass.sh -b 0.1 -B 0.3  -m 10 -M 11 -T sig 
0.1,0.3,10,11,

我不知道为什么我不能传递超过四个参数。有什么建议么?

bash getopts
  • 1 个回答
  • 103 Views
Martin Hope
sanjayz
Asked: 2022-07-13 09:55:29 +0800 CST

识别是否存在并从 shell args 中删除特定参数

  • 1

我必须检查特定参数是否可以说“java8”存在于我的脚本的 shell 参数中,如果存在则删除它。我还希望它存储在其他变量中,但希望将其从我的 $*.

一个选项我尝试使用 getopts 检查 arg 是否存在,但我不知道如何删除参数。

请注意 - 用于检查 'java8' 的 arg 位置未知 我可以在任何地方

while getopts "f:" flag
do
     case $flag in
         f)
           echo $OPTARG
           ;;
     esac
done
echo $*
~

所以基本上当我调用 -

./test.sh arg1 arg2 -f java8 arg3

执行 getopts 块后,剩余的 args 将是

参数 1、参数 2、参数 3

arguments getopts
  • 2 个回答
  • 38 Views
Martin Hope
Veak
Asked: 2021-12-20 12:46:18 +0800 CST

带有双冒号的 getopts 可选值

  • 0

getopts 是否不接受使用双冒号的选项的可选参数(例如使用 shortopts="t::")?

bash getopts
  • 1 个回答
  • 421 Views
Martin Hope
Erwann
Asked: 2019-06-28 20:00:54 +0800 CST

来自 getopts 的意外行为

  • 3

考虑:

#!/bin/sh

while getopts ":h" o; do
  case "$o" in
    h )
    "Usage:
    sh $(basename "$0") -h      Displays help message
    sh $(basename "$0") arg     Outputs ...

     where:
    -h   help option
        arg  argument."
    exit 0
    ;;
    \? )
    echo "Invalid option -$OPTARG" 1>&2
    exit 1
    ;;
    : )
    echo "Invalid option -$OPTARG requires argument" 1>&2
    exit 1
    ;;
  esac
done

这个调用返回not found为什么?

$ sh getopts.sh -h
getopts.sh: 12: getopts.sh: Usage:
    sh getopts.sh -h        Displays help message
    sh getopts.sh arg   Outputs ...

     where:
    -h   help option
        arg  argument.: not found

还行吧:

$ sh getopts.sh arg

对于这个,我期待“无效选项”:

$ sh getopts.sh

还行吧:

$ sh getopts.sh -s x
Invalid option -s
shell-script getopts
  • 1 个回答
  • 403 Views
Martin Hope
trikelef
Asked: 2018-12-13 02:36:36 +0800 CST

getopts 似乎不起作用

  • 3

我正在尝试运行以下脚本getopts来解析选项,但它似乎不起作用:

#!/bin/bash
set -x
echo $@
while getopts "rf" opt
do
  case "${opt}" in
    r)
        ropt=${OPTARG}
        ;;
    f)
        fopt=${OPTARG}
        ;;
  esac
done

shift $((OPTIND -1))

echo $fopt $ropt

我得到的输出是:

$ ./myscript.sh -f opt2 -r opt1
+ echo -f opt2 -r opt1
-f opt2 -r opt1
+ getopts rf opt
+ case "${opt}" in
+ fopt=
+ getopts rf opt
+ shift 1
+ echo

+ set +x

你对我做错了什么有任何想法吗?

bash getopts
  • 1 个回答
  • 3858 Views
Martin Hope
Vlastimil Burián
Asked: 2018-11-27 02:48:15 +0800 CST

getopts 循环中的转变 - 需要澄清

  • 1

shift如果有人澄清了在这个简单的解析器代码中使用的必要性,我会很高兴:

while getopts ":hp:" option
do
    case "${option}" in
        p)
            some_parameter=${OPTARG}
            ;;
        h)
            print_usage_and_exit 0
            ;;
        *)
            print_usage_and_exit 1
            ;;
    esac
done

shift $(( OPTIND - 1 ))

例如,我不清楚:

  1. 为什么似乎不需要shift循环内部?

    访问是否会getopts移动参数本身,或者它是如何工作的?

  2. 为什么需要shiftafter getopts?

    我不明白为什么getopts最后不会自己这样做。

shell getopts
  • 1 个回答
  • 2268 Views
Martin Hope
Traabefi
Asked: 2018-10-23 11:40:19 +0800 CST

GETOPTS 解析空和非空参数

  • 0

我正在尝试制作具有两个开关的脚本 -h 和 -d, -d 具有强制数字参数。之后,将有未确定数量的文件路径。到目前为止,我有这个,但代码似乎无法识别无效的开关 -r (可以是任何名称)并且当我不输入任何开关时也不起作用:

while getopts ":hd:" opt; do
case $opt in
    h)
            echo $usage
        exit 0
            ;;
    d)
        shift 2
            if [ "$OPTARG" -eq "$OPTARG" ] ; then # ako dalsi argument mame cislo
            depth=$OPTARG
        fi
            ;;
        \?)
        shift 1
            ;;
        :)
            shift 1
            ;;
esac
done
echo $1

当我输入 时,当我输入时,我只./pripravne1.sh -d /home/OS/test_pz/test2得到空字符串。./pripravne1.sh: [: /home/OS/test_pz/test2: integer expression expected./pripravne1.sh -r /home/OS/test_pz/test2

shell-script getopts
  • 2 个回答
  • 3418 Views
Martin Hope
mf94
Asked: 2018-08-22 08:55:08 +0800 CST

在 HPC 作业中提交 HPC 作业

  • 0

我有一个大型脚本,它依赖于输入参数(使用 getopts)。其中一个参数是一个包含文件的目录(所有文件都命名为 *bam) 这个脚本有两个部分:

  • Part1:根据输入的*bam文件,计算一个具体的数字。需要明确的是,结果是一个数字,而不是每个文件一个数字。
  • 第 2 部分:使用第 1 部分中找到的编号,对每个 *bam 文件执行一系列操作。

现在,从计算的角度来看,part1 最初非常快。所以我的设置是:

  • 在终端上运行脚本:bash script.sh
  • 在 script.sh 中,对于第 2 部分,为每个文件提交 HPC 作业

然而,现在我需要分析比原计划更多的文件,我意识到第 1 部分的计算量也很大——因此我还需要在 HPC 上运行它。

所以我的问题是:

  • 是否可以提交在其中提交作业的 HPC 作业?
  • 换句话说,我可以将 script.sh 作为作业提交,并且仍然让它在第 2 部分中提交作业吗?

明确地说,这是我的脚本的示例:

#!/usr/bin/bash

# PART 0: accept all input arguments

USAGE() { echo "Usage: bash $0 [-b <in-bam-files-dir>] [-o <out-dir>] [-c <chromlen>]" 1>&2; exit 1; }

if (($# == 0)); then
        USAGE
fi

# Use getopts to accept each argument

while getopts ":b:o:c:h" opt
do
    case $opt in
       b ) BAMFILES=$OPTARG
        ;;
       o ) OUTDIR=$OPTARG
        ;;
       c ) CHROMLEN=$OPTARG
        ;;
       h ) USAGE
        ;;
       \? ) echo "Invalid option: -$OPTARG exiting" >&2
        exit
        ;;
       : ) echo "Option -$OPTARG requires an argument" >&2
        exit
        ;;
        esac
    done

# PART1: calculate this unique number

NUMBER=0    

for i in  $(ls $BAMFILES/*.bam)
do
  make some calculations on each file to obtain a number ...
  keep only the smallest found number and assign its value to $NUMBER
done

echo "Final number is ${NUMBER} "

# PART2: Using $NUMBER that we found above, submit a job for each *bam file

for i in $(ls $BAMFILES/*bam)
do

    if [ ! -f ${OUTDIR}/${SAMPLE}.bw ];
    then 
        command=" command -options -b $NUMBER $i"

    echo $command | qsub -V -cwd -o $OUTDIR -e $OUTDIR -l tmem=6G -l h_vmem=6G -l h_rt=3600 -N result_${SAMPLE}

    fi

done
jobs getopts
  • 1 个回答
  • 54 Views
Martin Hope
Tim
Asked: 2018-02-26 11:02:44 +0800 CST

`getopts`遇到`--`时的行为是什么?

  • 3

按照惯例--,这表明它之后没有更多选择。在我看来,当使用getoptswithcase子句时,-)模式子句不匹配--。那么getopts它遇到时的行为是什么--?它是否将其--视为一个选项、一个非选项参数,或者两者都不是?谢谢。

bash getopts
  • 1 个回答
  • 567 Views
Martin Hope
Tim
Asked: 2018-02-26 08:15:19 +0800 CST

getopts 的选项字符串的第一个字符是:(冒号)的目的是什么?

  • 12

在使用时的选项字符串中getopts,来自http://wiki.bash-hackers.org/howto/getopts_tutorial

如果选项字符串的第一个字符是 :(冒号),这通常是无意义的,因为它前面没有选项字母,getopts 切换到“静默错误报告模式”。在生产性脚本中,这通常是您想要的,因为它允许您自己处理错误而不会被烦人的消息干扰。

我想知道以下是什么意思:

  • “静默报错模式”

  • “它允许您自己处理错误而不会被烦人的消息打扰”?

你能举一些例子吗?

bash getopts
  • 2 个回答
  • 8689 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve