命令行选项
-
定义
-
可以修改命令的行为的单个字母,在命令行中通常带有-等字符
-
读取命令行选项
-
根据位置参数变量
-
处理简单选项
while循环+shift
while循环用于遍历选项或参数是否为空值,以及选项执行的动作的循环,shift的作用是遍历每一个选项,然后进行销毁
-
分离参数和选项
使用--作为选项和参数的分隔符,--前为选项,--后为参数,通常遇到--后,把--用shfit命令处理掉,再用break跳出循环
-
处理带值选项
组合运用$1和$2
$1用于处理命令行选项,$2用于处理命令行参数,通常把$2赋值给一个变量进行引用,引用完毕通过shift处理掉$2,以供下一个带参数选项使用
-
注意事项 根据位置参数变量读取命令行参数这种方法不能识别组合选项,如-abc,三个选项合并为一个选项这种
-
使用getopt
可以把命令行参数和命令行选项转化为脚本需要的标准格式,既可以识别单独的命令行选项,也可以识别带参数的命令行参数,处理参数完毕后,会输出处理结果
- 基本格式
getopt -q optstring parameters optstring负责提供选项信息,如是否带参数,如果带参数,就在选项字母后面加上冒号: parameters是我们提供的选项和参数
-
脚本中使用
由于getopt只会输出处理结果,不会把处理结果替换原值,因此需要配合set进行替换原命令行参数的值,即getopt负责格式化,set负责替换
set -- \$(getopt ab:cd "$@")
-
使用getopts(getopt升级版)
作为getopt的加强版,解决getopt不能处理带空格的参数的缺陷,同时独立完成格式化和替换参数原值,把结果保存在指定变量
- 基本格式
getopts :ab:cd variable 第一个冒号是代表忽略错误,第二个冒号是代表改选项带参数 getopts内置两个环境变量,一个是$OPTAGR,代表选项的参数值,一个是$OPTINT代表正在处理参数的位置
- 脚本中使用
while getopts :ab:cd variable variable存放的是命令行选项,通常配合case,有点类似于位置参数$1的作用
-
-
命令行参数
-
定义
- 位于命令后面的数据
-
读取参数
-
根据位置参数变量
-
$0代表程序名
-
一般用于读取脚本名
- 使用name=$(basename $0)可以返回一个不包含路径的文件名,并保存在name变量中
-
$1代表第一个参数 $2代表第二个参数 ${10}代表第10个参数 ${11}代表第11个参数 $#代表参数的数量 $*存储所有的参数的值 $@存储所有的参数的值
- 注意事项
-
$1-9代表参数1到9,超过9就需要用${n}来表示 传参的值是一个带有空格的字符串,需要用双引号来括起来,否则将看出是两个参数值 为了避免执行脚本时,用户不小心忘记传参,必须在执行脚本之前,对参数进行检查,可以通过[ -n "$num" ]的方式检查位置参数变量是否有数据 如果执行脚本是需要多个参数,判断用户输入的参数数量是否符合要求,可以通过[ $# -ne num ] 来提示用户按要求输入参数 $#变量代表了最后的参数,如果想读取该变量的值,使用${!#};当用户没有输入参数时,$#为0,\${!#}变量会返回脚本名 $*与$@的区别在于,$*会把所有的参数当成一个字符串,$@会把每一个参数都单独处理,通常使用$@来进行遍历参数
-
移动变量
shift
作用是把参数移除参数变量,默认把所有的参数变量向左移动一个位置,$0除外 shift n 可以指定移动的位置,可理解为消灭前n个参数 参数被移出列表之后,该值就丢失了,无法恢复
-
获取用户输入
-
read命令
-
接受和处理用户键盘输入
-
用于接受用户键盘输入,并把输入保存到一个变量,方便后续调用,如果不知道变量,会保存在一个$REPLY环境变量中
read -p "tip" variable
-
设置用户输入超时时间为5秒
read -t 5
-
设置接受字符个数为1并自动退出
read -n1
-
设置加密的方式输入,适用于接受密码输入
read -s
-
-
读取文件输入
-
默认一次读取一行,如果想从一个文件中读取多行,可以利用cat命令,查看所有行内容,把结果重定向给循环,再通过while循环加read一直读取,并保存再变量中
cat file | while read variable
-
-