shell编程基础(第12篇:命令行参数)

前言

    编写命令行程序,为了程序的灵活性,需要使用命令行参数,通过命令行参数与程序进行交互,更能满足实际需求,比如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程序中竟然会使用,本文首先列举了基本的一些用法

你可能感兴趣的:(Linux,shell脚本,bash,linux,开发语言)