一、 getopts
①简介
- C有getopt_long函数用于解析命令行参数,在shell里用的是getopts。
- 一般格式:getopts options variable
getopts 一般是在循环中运行,每次执行循环,getopts 就检查下一个命令行参数,并判断它是否合法。即检查参数是否以 - 开头,后面跟一个包含在 options 中的字母。如果是,就把匹配的选项字母存在指定的变量 variable 中,并返回退出状态0;如果 - 后面的字母没有包含在 options 中,就在 variable 中存入一个 ?,并返回退出状态0;如果命令行中已经没有参数,或者下一个参数不以 - 开头,就返回不为0的退出状态。
#!/bin/bash
while getopts "a:" opt; do
case $opt in
a)
echo "this is -a the arg is ! $OPTARG"
;;
\?)
echo "Invalid option: -$OPTARG"
;;
esac
done
②其他:
- getopts 允许把选项堆叠在一起(如 -ms)
- 如要带参数,须在对应选项后加 : 。此时选项和参数之间至少有一个空白字符分隔,这样的选项不能堆叠。
- 如果在需要参数的选项之后没有找到参数,它就在给定的变量中存入 ? ,并向标准错误中写入错误消息。否则将实际参数写入特殊变量 :OPTARG
- 另外一个特殊变量:OPTIND,反映下一个要处理的参数索引,初值是 1,每次执行 getopts 时都会更新。
二、 source
- source filepath
该命令使当前shell读入路径为filepath的shell文件并依次执行文件中的所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。例如,当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用source命令,如source /etc/profile。 - source filename其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。
三、 basename和dirname
- basename 是去除目录后剩下的名字
- dirname 是取出目录
四、 export
- Linux export命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。
- 使用:
export [-fnp][变量名称]=[变量设置值]
-f 代表[变量名称]中为函数名称。
-n 删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量。
五、 shell-init错误
- 当一个shell脚本中,前面已经通过cd进入一个目录,然后后面在没退出那个目录前,把该目录删了,此时会出现错误。
- 一般错误提示为:shell-init: error retrieving current directory:getcwd