前言
编写命令行程序,为了程序的灵活性,需要使用命令行参数,通过命令行参数与程序进行交互,更能满足实际需求,比如ls -l,-l就是参数
命令行参数的传递
test_hello.sh first second
shell编程使用空白字符分隔单词,按照标准约定,bash解释器将第一个单词作为命令,后续单词均称为参数,也称为命令行参数,上面代码中test_hello.sh为命令、first为第一个参数、second为第二个参数
常见的参数形式
# 短参数
$ ls -r #便于在命令行输入
# 长参数
$ ls --reverse #便于在程序中理解
短参数往往是在命令行中使用的,而长参数则适合在shell程序中使用,这样代码的可读性才会好!
命令到底是什么?
1、内置命令
比如cd、echo等等都是内置命令
2、可执行程序(可能是bash程序、c++程序、python程序、java程序等等,也称为二进制文件)
比如adb、你写的程序等等
3、函数
比如你写的……
4、别名
比如…………
怎么区分命令呢?
怎么区分某个命令为bash内置的命令?还是一个可执行文件呢?只要使用type命令,type命令会告知命令到底是什么?
1、内置命令
$ type cd
cd is a shell builtin
2、别名
$ type ls
ls is aliased to `ls -F --color=auto --show-control-chars'
3、可执行文件(程序)
$ type adb
adb is /e/Users/cadi/AppData/Local/Android/sdk/platform-tools/adb
查找命令的顺序
当我们执行一个命令的时候,bash解释器是查找命令的顺序过程,如果你熟悉该工作原理,碰见命令冲突就很容易解决了
1、是否为同名函数
2、判断是否内置命令
3、检查是否为别名
4、通过PATH环境变量中定义的所有目录中查找命令(可执行文件)
命令行参数的获取
聊完命令,再说说如何在shell程序获取传递进来的命令行参数,根据标准,$1代表第一个命令行参数、$2代表第二个命令行参数,依次类推,这里要这样理解,1、2等都是特殊的变量名(变态吗),而$则是获取变量值的特殊字符,如果脚本参数多于9个,第10个参数必须用${10},不能再用$10了!
./test.sh devices
devices就是第一个参数,通过$1我们可以获取到
./test.sh first second
$1可以获取到first
$2可以获取到second
其他命令行参数
- $0:脚本文件名,即script.sh
- $#:参数总数
- $@:全部参数,使用空格分隔
- $*:全部参数,参数之间使用变量$IFS值的第一个字符作为分隔字符,默认为空格字符,但是可以自定义IFS变量的值
总结
命令行参数,编写shell程序中竟然会使用,本文首先列举了基本的一些用法