目录
Linux中命令选项(option)及参数简介
命令行选项(option)与命令行参数的使用方法
首页 运维 linux运维 linux文档中option指的是什么

linux文档中option指的是什么

May 16, 2023 am 09:55 AM
linux option

在linux中,option是指命令选项,是调整命令执行行为的开关,即选项不同决定了命令的显示结果不同。option(选项)分为长选项和短选项:1、短选项都是使用“-”引导,当有多个短选项时,各选项之间使用空格隔开;2、长选项都是完整的单词,且通常不能组合。

Linux中命令选项(option)及参数简介

登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着“选项”(英文options)或“参数”(英文arguments)。即Linux中命令格式为:

<strong>command [options] [arguments]</strong> //中括号代表是可选的,即有些命令不需要选项也不需要参数,但有的命令在运行时需要多个选项或参数。

选项options

选项是调整命令执行行为的开关,即,选项不同决定了命令的显示结果不同。

选项分为长选项和短选项。

短选项:比如-h,-l,-s等。(-   后面接单个字母)

  • 短选项都是使用‘-’引导,当有多个短选项时,各选项之间使用空格隔开。

  • 有些命令的短选项可以组合,比如-l –h 可以组合为–lh

  • 有些命令的短选项可以不带-,这通常叫作BSD风格的选项,比如ps aux

  • 有些短选项需要带选项本身的参数,比如-L 512M

长选项:比如--help,--list等。(--  后面接单词)

  • 长选项都是完整的单词

  • 长选项通常不能组合

  • 如果需要参数,长选项的参数通常需要‘=’,比如--size=1G

参数arguments

  参数是指命令的作用对象。

  如ls命令,不加参数的时候显示是当前目录,也可以加参数,如ls /dev, 则输出结果是/dev目录。

  以上简要说明了选项及参数的区别,但具体Linux中哪条命令有哪些选项及参数,需要我们靠经验积累或者查看Linux的帮助了。

总结:

选项是限定结果的显示结果  

  • 短选项(-  一个横杠):只能修饰一个字符的选项,比如: ls -a,当然多个短选项可以合并,比如tar -cvf

  • 长选项(--  两个横杠):可以修饰单个字符,也可以修饰一个单词,比如:

    (1) chkconfig --list

    (2)chkconfig --add xxx

    (3)service --status-all

参数是传递到脚本中的真实的参数

命令行选项(option)与命令行参数的使用方法

问题描述:在linux shell中如何处理tail -n 10 access.log这样的命令行选项?

在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景。

  • 1,直接处理,依次对$1,$2,...,$n进行解析,分别手工处理;

  • 2,getopts来处理,单个字符选项的情况(如:-n 10 -f file.txt等选项);

  • 3,getopt,可以处理单个字符选项,也可以处理长选项long-option(如:--prefix=/home等)。

总结:小脚本手工处理即可,getopts能处理绝大多数的情况,getopt较复杂、功能也更强大。

1,直接手工处理位置参数

必须要要知道几个变量

*    $0 :即命令本身,相当于c/c++中的argv[0]  
*    $1 :第一个参数.  
*    $2, $3, $4 ... :第2、3、4个参数,依次类推。  
*    $#  参数的个数,不包括命令本身  
*    $@ :参数本身的列表,也不包括命令本身  
*    $* :和$@相同,但"$*" 和 "$@"(加引号)并不同,"$*"将所有的参数解释成一个字符串,而"$@"
登录后复制

是一个参数数组。

手工处理方式能满足多数的简单需求,配合shift使用也能构造出强大的功能,但处理复杂选项时建议用下面的两种方法。

例子,(getargs.sh):

#!/bin/bash  
if [ $# -lt 1 ]; then  
    echo "error.. need args"  
    exit 1  fi  
echo "commond is $0"  echo "args are:"  for arg in "$@"  do  
    echo $arg  
done
登录后复制

运行命令:

./getargs.sh 11 22 cc  
commond is ./getargs.sh  
args are:  
11  22  cc
登录后复制

2,getopts (shell内置命令)

处理命令行参数是一个相似而又复杂的事情,为此,c提供了getopt/getopt_long等函数,c++的boost提供了

options库,在shell中,处理此事的是getopts和getopt。

getopts/getopt的区别,getopt是个外部binary文件,而getopts是shell builtin。

[root@jbxue ~]$ type getopt  
getopt is /usr/bin/getopt  
[root@jbxue ~]$ type getopts  
getopts is a shell builtin
登录后复制

getopts不能直接处理长的选项(如:--prefix=/home等)

关于getopts的使用方法,可以man bash 搜索getopts

getopts有两个参数,第一个参数是一个字符串,包括字符和“:”,每一个字符都是一个有效的选项,如果

字符后面带有“:”,表示这个字符有自己的参数。getopts从命令中获取这些参数,并且删去了“-”,并

将其赋值在第二个参数中,如果带有自己参数,这个参数赋值在“optarg”中。提供getopts的shell内置了

optarg这个变变,getopts修改了这个变量。

这里变量$optarg存储相应选项的参数,而$optind总是存储原始$*中下一个要处理的元素位置。

while getopts ":a:bc" opt #第一个冒号表示忽略错误;字符后面的冒号表示该选项必须有自己的参数

例子,(getopts.sh):

echo $*  
while getopts ":a:bc" opt  
do  
        case $opt in  
                a ) echo $optarg  
                    echo $optind;;  
                b ) echo "b $optind";;  
                c ) echo "c $optind";;  
                ? ) echo "error"  
                    exit 1;;  
        esac  
done  
echo $optind  
shift $(($optind - 1))  
#通过shift $(($optind - 1))的处理,$*中就只保留了除去选项内容的参数,可以在其后进行正常的shell  
  
编程处理了。  
echo $0  echo $*
登录后复制

执行命令:

./getopts.sh -a 11 -b -c  
-a 11 -b -c  
11  3  b 4  c 5  5  ./getopts.sh
登录后复制

3,getopt(一个外部工具)

具体用用法可以 man getopt

  • #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项,如-carg 而不能是-c arg

  • #--long表示长选项

例子,(getopt.sh):

#!/bin/bash  
# a small example program for using the new getopt(1) program.  
# this program will only work with bash(1)  
# an similar program using the tcsh(1) script. language can be found  
# as parse.tcsh  
# example input and output (from the bash prompt):  
# ./parse.bash -a par1 &#39;another arg&#39; --c-long &#39;wow!*\?&#39; -cmore -b " very long "  # option a  
# option c, no argument  
# option c, argument `more&#39;  # option b, argument ` very long &#39;  # remaining arguments:  
# --> `par1&#39;  # --> `another arg&#39;  # --> `wow!*\?&#39;  # note that we use `"$@"&#39; to let each command-line parameter expand to a  # separate word. the quotes around `$@&#39; are essential!  # we need temp as the `eval set --&#39; would nuke the return value of getopt.  #-o表示短选项,两个冒号表示该选项有一个可选参数,可选参数必须紧贴选项  
#如-carg 而不能是-c arg  
#--long表示长选项  
#"$@"在上面解释过  
# -n:出错时的信息  
# -- :举一个例子比较好理解:  
#我们要创建一个名字为 "-f"的目录你会怎么办?  
# mkdir -f #不成功,因为-f会被mkdir当作选项来解析,这时就可以使用  
# mkdir -- -f 这样-f就不会被作为选项。  
temp=`getopt -o ab:c:: --long a-long,b-long:,c-long:: \  
     -n &#39;example.bash&#39; -- "$@"`  
if [ $? != 0 ] ; then echo "terminating..." >&2 ; exit 1 ; fi  
# note the quotes around `$temp&#39;: they are essential!  #set 会重新排列参数的顺序,也就是改变$1,$2...$n的值,这些值在getopt中重新排列过了  
eval set -- "$temp"  #经过getopt的处理,下面处理具体选项。  
while true ; do  
        case "$1" in  
                -a|--a-long) echo "option a" ; shift ;;  
                -b|--b-long) echo "option b, argument \`$2&#39;" ; shift 2 ;;  
                -c|--c-long)  
                        # c has an optional argument. as we are in quoted mode,  
                        # an empty parameter will be generated if its optional  
                        # argument is not found.  
                        case "$2" in  
                                "") echo "option c, no argument"; shift 2 ;;  
                                *)  echo "option c, argument \`$2&#39;" ; shift 2 ;;  
                        esac ;;  
                --) shift ; break ;;  
                *) echo "internal error!" ; exit 1 ;;  
        esac  
done  
echo "remaining arguments:"  for arg do  
   echo &#39;--> &#39;"\`$arg&#39;" ;  
done
登录后复制

运行命令:

./getopt.sh --b-long abc -a -c33 remain  
option b, argument `abc&#39;  
option a  
option c, argument `33&#39;  
remaining arguments:  
--> `remain&#39;
登录后复制

以上是linux文档中option指的是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何解决Linux终端中查看Python版本时遇到的权限问题? 如何解决Linux终端中查看Python版本时遇到的权限问题? Apr 01, 2025 pm 05:09 PM

Linux终端中查看Python版本时遇到权限问题的解决方法当你在Linux终端中尝试查看Python的版本时,输入python...

在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? 在Docker环境中使用PECL安装扩展时为什么会报错?如何解决? Apr 01, 2025 pm 03:06 PM

在Docker环境中使用PECL安装扩展时报错的原因及解决方法在使用Docker环境时,我们常常会遇到一些令人头疼的问�...

如何在LAMP架构下高效整合Node.js或Python服务? 如何在LAMP架构下高效整合Node.js或Python服务? Apr 01, 2025 pm 02:48 PM

在LAMP架构下整合Node.js或Python服务许多网站开发者都面临这样的问题:已有的LAMP(Linux Apache MySQL PHP)架构网站需要...

在Linux终端中使用python --version命令时如何解决权限问题? 在Linux终端中使用python --version命令时如何解决权限问题? Apr 02, 2025 am 06:36 AM

Linux终端中使用python...

Beyond Compare同步Windows和Linux文件时,大小写敏感性失效怎么办? Beyond Compare同步Windows和Linux文件时,大小写敏感性失效怎么办? Apr 01, 2025 am 08:06 AM

BeyondCompare文件比较与同步的难题:大小写敏感性失效在使用Beyond...

如何在macOS上将apscheduler定时任务配置为服务? 如何在macOS上将apscheduler定时任务配置为服务? Apr 01, 2025 pm 06:09 PM

在macOS上将apscheduler定时任务配置为服务在macOS平台上,如果你想将apscheduler定时任务配置为一个服务,类似于ngin...

Linux系统自带Python解释器能删除吗? Linux系统自带Python解释器能删除吗? Apr 02, 2025 am 07:00 AM

关于Linux系统自带Python解释器的删除问题许多Linux发行版在安装时会预装Python解释器,它并非通过软件包管理器�...

c语言多线程的四种实现方式 c语言多线程的四种实现方式 Apr 03, 2025 pm 03:00 PM

语言多线程可以大大提升程序效率,C 语言中多线程的实现方式主要有四种:创建独立进程:创建多个独立运行的进程,每个进程拥有自己的内存空间。伪多线程:在一个进程中创建多个执行流,这些执行流共享同一内存空间,并交替执行。多线程库:使用pthreads等多线程库创建和管理线程,提供了丰富的线程操作函数。协程:一种轻量级的多线程实现,将任务划分成小的子任务,轮流执行。

See all articles