命令行参数
读取参数
bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数。位置参数变量是标准的数字:$0是程序名,$1是第一个参数,$2是第二个参数,依次类推,直到第9个参数$9.
可在shell脚本中像使用其他变量一样使用$1变量。shell脚本会自动将命令行参数的值分配给变量。
如要输入更多的命令行选项,则在命令行上每个参数都必须用空格分开。也可以在命令行上用文本字符串,但在含有空格时,会遇到问题,只能读取第一个空格前的文本,例如输入Rich Blum时,只会读取Rich。(因为每个参数都是由空格分开的)。此时需要用引号(单引号双引号皆可)。
如果脚本需要多于9个命令行参数,你仍可以处理。但是需要稍微修改下变量名。在第9个变量后,必须在变量数字周围加花括号,比如${10}.这个技术允许向脚本添加任意多的要用的命令行参数。
读取程序名
可以用$0来获取shell在命令行启动的程序的名字。这在写有多个功能的工具时很方便。但在输入路径时,可能就会返回路径。但basename命令会只返回程序名而不包括路径。
参数计数:
通常在脚本中使用命令行参数之前应该检查下命令行参数,对于使用多个命令行参数的脚本来说,这有点麻烦。
$#特殊变量含有脚本运行时就有的命令行参数的个数,可在脚本任何地方使用这个特殊变量,就跟普通变量一样。
不能在花括号内使用美元符,但是可以将美元符换成感叹号。如${!#} ,既然$#代表含有参数的总数值,则${!#}代表了最后一个命令行参数的变量。但需要注意的是,当命令行上没有参数时,$#的值为零,在params变量中也为零,但${!#}变量会返回命令行用到的脚本名。
抓取所有的参数
$*和$@变量提供了对所有参数的快速访问。这两个都能够在单个变量中存储所有的命令行参数。
$*变量会将命令行上提供的所有参数当做单个单词保存。每个词是指命令行上出现的每个值。基本上,$*变量会将这些都当做一个参数,而不是多个对象。
反过来说,$@变量会将命令行上提供的所有参数当成同一个字符串中的多个独立的单词
移动变量
shift会根据它们的相对位置来移动命令行参数。当使用shift时,默认情况下它会将每个参数变量减一。$3的值会移到$2,变量$2的值会移到$1,而变量$1的值则会被删除(注意,变量$0的值,也就是程序名不会改变)。
处理选项
查找选项
处理简单选项