学习啦>学习电脑>操作系统>Linux教程>

linux shell命令行选项与参数有哪些怎么用

加城分享

  Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。在bash中,可以用以下三种方式来处理命令行参数,每种方式都有自己的应用场景本文介绍了linux shell中使用命令行选项与命令行参数的方法

  方法步骤

  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 'another arg' --c-long 'wow!*\?' -cmore -b " very long "

  # option a

  # option c, no argument

  # option c, argument `more'

  # option b, argument ` very long '

  # remaining arguments:

  # --> `par1'

  # --> `another arg'

  # --> `wow!*\?'

  # note that we use `"$@"' to let each command-line parameter expand to a

  # separate word. the quotes around `$@' are essential!

  # we need temp as the `eval set --' 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 'example.bash' -- "$@"`

  if [ $? != 0 ] ; then echo "terminating..." >&2 ; exit 1 ; fi

  # note the quotes around `$temp': 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'" ; 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'" ; shift 2 ;;

  esac ;;

  --) shift ; break ;;

  *) echo "internal error!" ; exit 1 ;;

  esac

  done

  echo "remaining arguments:"

  for arg do

  echo '--> '"\`$arg'" ;

  done

  运行命令:

  复制代码 代码如下:

  ./getopt.sh --b-long abc -a -c33 remain

  option b, argument `abc'

  option a

  option c, argument `33'

  remaining arguments:

  --> `remain'

  补充:Linux基本命令

  1.ls命令:

  格式::ls [选项] [目录或文件]

  功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。

  常用选项:

  -a :列出目录下的所有文件,包括以 . 开头的隐含文件。

  -d :将目录像文件一样显示,而不是显示其他文件。

  -i :输出文件的i节点的索引信息。

  -k :以k字节的形式表示文件的大小。

  -l :列出文件的详细信息。

  -n :用数字的UID,GID代替名称。

  -F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文 件;“/”表示目录;“@”表示符号链接;“l”表示FIFOS;“=”表示套接字。

  2.cd命令

  格式:cd [目录名称]

  常用选项:

  cd .. 返回上一级目录。

  cd ../.. 将当前目录向上移动两级。

  cd - 返回最近访问目录。

  3.pwd命令

  格式: pwd

  功能:显示出当前工作目录的绝对路径。

  相关阅读:Linux主要特性

  完全兼容POSIX1.0标准

  这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

  多用户、多任务

  Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。

  良好的界面

  Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。

  支持多种平台

  Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。


linux shell命令行选项与参数相关文章:

1.linux chsh命令参数及用法详解

2.linux shell cd命令

3.linux shell脚本执行命令

4.关于Linux中10个你不知道的命令补齐技巧有哪些

5.xshell操作linux系统的常用命令

    4019638