每天写点shell--命令行参数

1、读取参数:位置参数变量是标准的数字: $0是程序名, $1是第一个参数, $2是第二个参数...

  1 #!/bin/bash
  2 # using one command line parameter
  3
  4 factorial=1
  5 for (( number = 1; number <= $1; number++ ))
  6 do
  7    factorial=$[ $factorial * $number ]
  8 done
  9 echo The factorial of $1 is $factorial

执行:

# ./test1.sh 5
The factorial of 5 is 120

2、输入多个命令行选项,则在命令行上每个参数都必须用空格分开:

  1 #!/bin/bash
  2 # testing two command line parameters
  3
  4 total=$[ $1 * $2 ]
  5 echo The first parameter is $1
  6 echo The second parameter is $2
  7 echo The total value is $total

执行:

# ./test2.sh  3 4
The first parameter is 3
The second parameter is 4
The total value is 12

3、如果脚本需要多个9个命令行参数,在变量数字周围加花括号:

  1 #!/bin/bash
  2 # handling lots of parameters
  3
  4 total=$[ ${10} * ${11} ]
  5 echo The tenth parameter is ${10}.
  6 echo The eleventh parameter is ${11}.
  7 echo The total is $total

执行:

# ./test4.sh 1 2 3 4 5 6 7 8 9 10 11
The tenth parameter is 10.
The eleventh parameter is 11.
The total is 110

4、测试参数

  1 #!/bin/bash
  2 # testing parameters before use
  3
  4 if [ -n "$1" ]     # -n 参数测试 $1(第一个参数)是否为null
  5 then
  6     echo Hello $1, glad to meet you.
  7 else
  8     echo "Sorry, you did not identify yourself"
  9 fi

执行:

# ./test7.sh
Sorry, you did not identify yourself

./test7.sh frank
Hello frank, glad to meet you.

5、特殊参数变量(参数计数 $#)

  1 #!/bin/bash
  2 # getting the number of parameters
  3 echo There were $# parameters supplied.

执行:

# ./test8.sh
There were 0 parameters supplied.

./test8.sh 1 2 3 There were 3 parameters supplied.

6、使用参数前测试参数的总数

  1 #!/bin/bash
  2 # testing parameters
  3
  4 if [ $# -ne 2 ]
  5 then
  6     echo Usage: test a b
  7 else
  8     total=$[ $1 + $2 ]
  9     echo The total is $total
 10 fi  

执行:

# ./test9.sh 1 2
The total is 3

# ./test9.shUsage: test a b

7、不需要知道有多少个参数个数,抓取最后一个参数 ${!#}

  1 #!/bin/bash
  2 params=$#
  3 echo The number of parameter is $params
  4 echo The last parameter is ${!#}                                   

执行:

# sh test10.sh 1 2 3 4 4
The number of parameter is 5  #参数的总个数The last parameter is 4    #最后一个参数的值

8、$*  [email protected]变量提供了对所有参数的快速访问, $*变量会将命令行上提供的所有参数当作单个单词保存,[email protected]变量会将命令行上提供的所有参数当做同一个字符串中多个独立的词。

  1 #!/bin/bash
  2 # testing $* and [email protected]
  3
  4 echo "Using the \$* method: $*"
  5 echo "Using the \[email protected] method: [email protected]"
                                 

执行:

# ./test11 rich katie jessica
Using the $* method: rich katie jessica
Using the [email protected] method: rich katie jessica

差异:

  1 #!/bin/bash
  2 # testing $* and [email protected]
  3 count=1              #赋值的时候注意不要有空格
  4 for param in "$*"
  5 do
  6     echo "\$* parameter #$count = $param"
  7     count=$[ $count + 1 ]
  8 done
  9
 10 count=1
 11 for param in "[email protected]"
 12 do
 13     echo "\[email protected] parameter #$count = $param"
 14     count=$[ $count + 1 ]
 15 done
~            

执行:

# ./test12.sh rich barbara katie jessica
$* parameter #1 = rich barbara katie jessica
[email protected] parameter #1 = rich
[email protected] parameter #2 = barbara
[email protected] parameter #3 = katie
[email protected] parameter #4 = jessica

可见, $*会将所有的参数当成单个单数,而[email protected]变量会单独处理每个参数。

时间: 2024-11-05 16:08:41

每天写点shell--命令行参数的相关文章

shell 命令行参数(基本)

命令行参数 \$0 表示程序名. \$1 至 \$9则是位置参数. \$# 表示参数的个数. \$* 将所有参数当做一个整体来引用\[email protected] 把每个参数作为一个字符串返回,可以使用for循环来遍历\$? 最近一个执行的命令的退出状态.0表示执行成功\$_ 上一个命令的最后一个参数.使用快捷键 ESC+. 也是这个效果 位置参数 位置参数不止9个,更多的参数也是一样支持的.只是要使用\${10}这样的形式引用. \$1 和 \${1}的效果是一样的. 不用花括号的话,\$

shell 命令行参数(getopt和getopts)

这里还有上一篇,这部分是基础:https://blog.51cto.com/steed/2443313 getopt 命令 使用getopt命令,可以解析任何命令行选项和参数,但是用法比较复杂.getopt的命令用法如下: $ getopt --help 用法: getopt optstring parameters getopt [options] [--] optstring parameters getopt [options] -o|--options optstring [option

shell 命令行参数解析

1. 手动解析参数,位置参数 (1) $#: 参数的个数 (2) $1...$9: 第一个参数...第9个参数 2. 内置命令解析,getopts,不支持长参数格式 命令格式:getopts option_string variable 第一个参数是一个字符串,包括字符和":",每一个字符都是一个有效的选项,如果字符后面带有":",表示这个字符有自己的参数.如果字符后面无":"符号表示无自己的参数 getopts从命令中获取这些参数,并且删去了&

python 命令行参数学习(二)

照着例子看看打打,码了就会.写了个命令行参数调用进行运算的脚本. 参考文章链接:http://www.jianshu.com/p/a50aead61319 #-*-coding:utf-8-*- __author__ = 'Deen' ''' import argparse parser = argparse.ArgumentParser() # 这个action的作用为,如果使用verbosity,则赋值为true,否则为false parser.add_argument("--verbosi

Shell特殊变量:Shell $0, $#, $*, [email&#160;protected], $?, $$和命令行参数

变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数的所有参数.被

Shell特殊变量:$0, $#, $*, [email&#160;protected], $?, $$和命令行参数

变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数. 例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数的所有参数.被双引号(" ")包含时,与 $* 稍有不同,下面将会讲到. $? 上个命令的退出状态,或函数的

【转】shell 教程——07 Shell特殊变量:Shell $0, $#, $*, [email&#160;protected], $?, $$和命令行参数

前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数

【Shell脚本学习8】Shell特殊变量:Shell $0, $#, $*, [email&#160;protected], $?, $$和命令行参数

前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid,看下面的代码: $echo $$ 运行结果 29949 特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传递给脚本或函数的所有参数. [email protected] 传递给脚本或函数

第5章4节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 命令行参数解析(原创)

天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文"寻求合作伙伴编写<深入理解 MonkeyRunner>书籍".但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在所难免.有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息. 设置好Monkey的CLASSPATH环境变量以指定"/system/framework /framework/monkey.jar"后,/system/bin/monkey这个shell脚本就会通

命令行参数(argc, argv)

每个C语言程序都必须有一个称为main()的函数,作为程序启动的起点.当执行程序时,命令行参数(command-line argument)(由shell逐一解析)通过两个入参提供给main()函数.第一个参数int argc,表示命令行参数的个数.第二个参数char *argv[],是一个指向命令行参数的指针数组,每一参数又都是以空字符(null) 结尾的字符串.第一个字符串,亦即argv[0]指向的,(通常)是该程序的名称.argv中的指针列表以NULL指针结尾(即argv[argc]为NU