所谓的位置参数指的也就是Shell脚本的命令行参数。在Shell函数里,它们同事也可以是函数的参数。各参数都有整数来命名。基于历史原因,当它超过9,就应该用大括号把数字框起来:
echo first arg is $1 echo tenth arg is ${10}
此外,通过特殊变量,我们还可以取得参数的总数,以及一次取得所有参数。
案例
假设你想知道某个用户正使用的终端是什么,你当然可以直接使用who命令,然后在输出中自己慢慢找。这么做很麻烦又容易出错——特别是当系统的用户很多的时候。你想做的只不过是在who的输出中找到那位用户,这个时候你可以用grep命令来进行查找操作,它会列出与grep第一个参数匹配的每一行。假设你要找的用户是 betsy:
who | grep betsy
betsy pts/3 Dec 27 11:07 (flags-r-us.example.com)
知道如何寻找特定的用户后,我们可以将命令放进脚本里,这段脚本的第一个参数就是我们要找的用户名称:
cat > finduser #建立新文件 #! /bin/sh # finduser --- 查看第一个参数所指定的用户是否登录 who | grep $1 ^D #以 End-of-file 结尾
chmod +x finduser #设置执行权限 ./finduser betsy #测试:寻找 betsy betsy pts/3 Dec 27 11:07 (flags-r-us.example.com) ./finduser benjamin #再找找好友 Ben benjamin dtlocal Dec 27 17:55 (kites.example.com) mv finduser $HOME/bin #将这个文件存进自己的bin目录
当然,这个程序还没有达到完美。要是我们没给任何参数,会发生什么事?
finduser Usage: grep [OPTION]... PATTERN [FILE]... Try 'grep --help' for more information.
具体的测试参数,待续...