首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Shell中使用getopt、getopts命令

命令的格式 getopt命令可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成适当的格式。...,当getopt命令运行时,它会检查提供的参数列表(-a -b test1 -cd test2 test3),并给予提供的optstring进行解析,它会自动讲-cd选项分成两个单独的选项,并插入双破折线来分割行中的额外参数...在脚本中使用getopt set命令的选项之一是双破折线(–),它会将命令行参数替换成shell中的各种变量 #/bin/bash ################################...: #我们要创建一个名字为 "-f"的目录你会怎么办?...#set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了 eval set -- "$TEMP" #经过getopt的处理,下面处理具体选项。

5.7K20

第三十三章 : 位置参数

when we give the program a large number of arguments such as this: 但是如果我们给一个程序添加大量的命令行参数,会怎么样呢?...我们如何处理那么多的参数?为此,shell 提供了一种方法,尽管笨拙,但可以解决这个问题。执行一次 shift 命令,就会导致所有的位置参数 “向下移动一个位置”。...The value of 每次 shift 命令执行的时候,变量 2 的值会移动到变量 1 中,变量 3 的值会移动到变量 2 中,依次类推。...当位置参数 $1 不为空的时候,这个循环会持续运行。在循环的底部,有一个 shift 命令,用来提升位置参数,以便确保该循环最终会终止。...处理 -f 参数的方式很有意思。当监测到 -f 参数的时候,会执行一次 shift 命令,从而提升位置参数 $1 为伴随着 -f 选项的 filename 参数。

95910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何在 Bash shell 脚本中解析命令行选项

    Bash 中的选项解析 在 Bash 中解析选项的策略是循环遍历所有传递给 shell 脚本的参数,确定它们是否是一个选项,然后转向下一个参数。重复这个过程,直到没有选项为止。 #!.../bin/bash while [ True ]; do if [ "$1" = "--alpha" -o "$1" = "-a" ]; then ALPHA=1 shift 1 else...shift 关键字会使所有参数位移一位,这样位置 2($2)的参数移动到位置 1($1)。处理完所有参数后会触发 else 语句,进而中断 while 循环。...在脚本的末尾,$ALPHA 的值会输出到终端。 测试一下这个脚本: $ bash ./test.sh --alpha 1 $ bash ./test.sh $ bash ..../test.sh -a --config my.conf baz 1 my.conf baz Bash 让选项解析变得简单 还有一些其他方法也可以解析 Bash 中的选项。

    1.6K20

    getopt(1) command

    1.简介 getopt 是一个广泛使用的命令行工具,用于解析复杂的命令行选项。它提供了一种标准化的方式来处理短选项和长选项,以及选项的参数,使得编写和维护命令行工具变得更加容易。...--:可选,用于明确区分 getopt 命令的选项和需要解析的选项字符串。 OPTSTRING:描述选项格式的字符串。 PARAMETERS:需要解析的实际命令行参数。...4.示例 (1)解析短选项。 #!/bin/bash OPTIONS=$(getopt -o ab:c -- "$@") if [ $?...让我们详细解释这个表达式的每个部分: getopt 命令的输出 getopt 命令解析命令行参数并输出一个重新排列的参数列表。...set -- 设置位置参数,使得脚本可以使用标准的 1, 2, … 来访问命令行参数。 (2)带长选项的解析。 #!

    9410

    getopts(1) builtin command

    对于一些只需要很简单的命令行参数的脚本,通过使用N形式轻松的完成解析,但对于比较复杂的命令行形式的参数,就需要脚本的编写者在脚本中加入复杂的代码对命令行入参进行解析。...本文将介绍如何使用 getopts 处理命令行参数。 1.简介 getopts 是 Shell 内建命令,用于解析位置参数。...如果遇到非选项(非 -开头)参数就终止解析,后面的选项和参数将不会被解析。 2.格式 getopts OPTSTRING NAME [ARGS] OPTSTRING 表示要识别的命令行选项。...OPTIND 可用于检查和处理未解析的命令行参数。例如shift $((OPTIND -1))可以跳过已处理的选项,处理剩余的参数。...shift ((OPTIND - 1)) 表示将已经解析的位置参数移除,使用 @ 可以访问剩余的所有参数。 运行上面的脚本会有如下输出: .

    14610

    《Linux命令行与shell脚本编程大全》第十四章 处理用户输入

    /test 1 2 3 4 5  注意第10行和第17行的输出的区别 14.3 移动变量 bash shell的shift工具命令能操作命令行参数。...shift命令会根据它们的相对位置来移动命令行参数。 如何使用:默认情况下将每个参数变量向左移动一个位置。 $3移动到$2, $2移动到$1。$1的值就被丢弃了,$0的值不会被改变。   1 #!...而不是选项 运行脚本时, -- 之前的是选项和选项的参数。  -- 的之后就是命令行参数。 3. 处理带值的参数 有时候选项会带上一个额外的参数值。...14.4.2 使用getopt命令 它能够识别命令行参数,从而在脚本中解析它们。 1.命令的格式 可以接受一系列任意形式的命令行选项和参数,并自动将它们转换成命令行参数。...每处理一个选项,OPTIND就会增1,处理完选项时就可以用shift来移动参数。从而处理参数。 例子:   1 #!

    1.8K50

    bashshell 解析命令行参数工具:getoptsgetopt

    选项参数识别完成之后,如果要取剩余的其它命令行参数,可以使用shift把选项参数抹去,就像例子里面的那样,对整个参数列表进行左移操作,最左边的参数就丢失了(已经用case判断并进行了处理,不再需要了),...2.所有选项参数必须写在其它参数的前面,因为getopts是从命令行前面开始处理,遇到非-开头的参数,或者选项参数结束标记--就中止了,如果中间遇到非选项的命令行参数,后面的选项参数就都取不到了。...xx -test june@Win7 192.168.1.111 02:33:22 ~ > 2、外部强大的参数解析工具:getopt 先来看下getopt/getopts的区别 1. getopts...,getopt 会重排参数顺序 9. getopts 出现的目的是为了代替 getopt 较快捷的执行参数分析工作 下面是getopt自带的一个例子: Code highlighting produced...# -- :举一个例子比较好理解: #我们要创建一个名字为 "-f"的目录你会怎么办?

    11.1K90

    shell脚本专题(05):传参

    \$和\$@都可以获取到左右的传入参数,区别是 \$\变量会将所有参数当成单个参数,而 \$@变量会单独处理每个参数。...4.遍历参数 使用shift命令默认情况下它会将每个参数变量向左移动一个位置,可以使用这个方法遍历所有传入的参数。 [root@shell param]# more test3.sh #!.../bin/bash i=1 while [ -n "$1" ] do echo "参数$i = $1" i=$[ $i + 1 ] shift done [root@shell param]...使用while先判断输入的参数1是否存在,如果非空则执行下面的操作:先输出参数$1,然后使用shift将参数\$2移动为新的\$1,如此循环,直至所有参数被遍历。...本文介绍了三种交互方式:命令行参数、选项和read方式。掌握了这三种方式会让脚本更优雅功能性更强。

    87611

    Shell编程-什么是shell

    我们前面学习了那么多命令,以及涉及到部分逻辑判断的问题。从简单来说,他就是Shell编程,只有由于命令比较单一,只能实现比较简单的功能。...特性:命令行编辑、历史记录、任务控制、自动补全等。 位置:通常位于 /bin/bash。 2....位置:通常位于 /bin/sh,在现代系统中,/bin/sh 可能指向 /bin/bash 的兼容模式。 当然还有其他Shell,比如Ksh,Zsh等使用较少,这里就不介绍了。...使用.sh标注shell脚本,只是为了方便区分和识别,其他类型的文件也是一样的。 2.解析器也只是为了指定执行的shell,建议也按照规范书写。...3.shell脚本内部的命令,可以是linux下的任何命令,但是需要注意,有些命令会涉及到交互,比如yum 不使用-y 参数,执行脚本的时候他就会在控制台等待你确认,会阻塞在这里,具体看需求。

    14910

    两行 shift 变一行,shell脚本解析参数出现“死循环”

    前几天发现小伙伴写的 shell 脚本在参数正常时执行正常,在参数异常时执行出现死循环了。 参考前文 在Bash中解析命令行参数的两种样例脚本 代码,将相关代码改为如下 demo 程序: #!.../bin/bash POSITIONAL_ARGS=() #初始化一个空数组,用来存储位置参数 while [[ $# -gt 0 ]]; do #当命令行参数的数量大于0时,进入循环 case...$1 in -e|--extension) #如果参数是这个,脚本会将紧随其后的参数(文件扩展名)保存在变量 EXTENSION 中 EXTENSION="$2" shift...="$2" shift 2 # 跳过参数 和 后面的值 ;; --default) #如果参数是这个,脚本会将变量 DEFAULT 设置为 YES DEFAULT...测试效果如下: 于是使用命令 bash -x demo-space-separated.sh -e 调试一下,输出信息如下: 根据打印输出并结合脚本代码可知,程序出现了死循环,参数个数 $# 没能减为

    11110

    Shell编程基础

    /bin/sh ... 注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。 符号#!...第一个if表达式判断输入命令行参数是否小于3个 (特殊变量$# 表示包含参数的个数) 。如果输入参数小于3个,则将帮助文字传递给cat命令,然后由cat命令将其打印在屏幕上。打印帮助文字后程序退出。...下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。...== 命令行参数 == XXXXXXXXXXXXXXXXXXXXXXXXXX 我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。...脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。

    83230

    sh脚本

    /bin/bash # script.sh echo "全部参数:" $@ echo "命令行参数数量:" $# echo '$0 = ' $0 echo '$1 = ' $1 echo '$2 =.../script.sh a b c 全部参数:a b c 命令行参数数量:3 $0 = script.sh $1 = a $2 = b $3 = c 用户可以输入任意数量的参数,利用for循环,可以读取每一个参数.../bin/bash for i in "$@"; do echo $i done shift 命令 shift命令可以改变脚本参数,每次执行都会移除脚本当前的第一个参数(1),使得后面的参数向前一位...getopts 命令 getopts命令用在脚本内部,可以解析复杂的脚本命令行参数,通常与while循环一起使用,取出脚本所有的带有前置连词线(-)的参数。...如果用户的输入项多于定义的变量,那么多余的输入项会包含到最后一个变量中。 如果read命令之后没有定义变量名,那么环境变量REPLY会包含所有的输入。 #!

    10.8K30

    如何编写一个shell脚本

    /bin/sh  符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。  当编辑好脚本时,如果要执行该脚本,还必须使其可执行。  ...反短斜线  使用反短斜线可以将一个命令的输出作为另外一个命令的一个命令行参数。  命令:   find ....下一步,我们使用shift命令将第一个和第二个参数从参数列表中删除,这样原来的第三个参数就成为参数列表$*的第一个参数。然后我们开始循环,命令行参数列表被一个接一个地被赋值给变量$file。...命令行参数  我们已经见过$* 和 $1, $2 ... $9 等特殊变量,这些特殊变量包含了用户从命令行输入的参数。...脚本首先在所有输入命令行参数中进行循环,将输入参数与case表达式进行比较,如果匹配则设置一个变量并且移除该参数。根据unix系统的惯例,首先输入的应该是包含减号的参数。

    1.7K40

    shell脚本编程之路1

    答:当Linux命令会语句不在命令行下执行(严格的说命令行执行的语句也是shell脚本),而是通过一个脚本程序文件执行时候,该程序就被称为shell脚本或shell程序;与windows中的bat批处理很类似.../sh 或者 /usr/bin/sh #前者实际指向一个文件就是后者 /bin/bash 或者 /usr/bin/bash /bin/tcsh /bin/csh ---- 0x01 Shell脚本初识...${10} ${*} :代表命令行中的所有参数,它把所有参数 看成一个整体 ${@} :代表命令行中的所有参数,它把所有参数 区分对待(划分个体) ${#} :代表命令行中所有参数的个数; 实际案例:...例如当shell程序处理完前九个命令行参数后,可以使用shift 9命令把10移到1;并且位置参数熟料也会随之而变化; 简单说明: #例如:若当前脚本程序获得的位置变量如下: $1=file1、$2=...#举例:当h选项开启时,如果将某个自定义命令从/usr/bin/目录下移动到/usr/local/bin/再运行,会提示无此命令。而当通过set +h将h选项关闭后,上述情况就不会出现。

    2.7K20
    领券