您的位置:首页 > 运维架构 > Shell

【Bash百宝箱】shell内建命令之cd、getopts

2016-09-19 20:38 495 查看

1、cd

在shell中,内建(builtin)命令cd,格式如下:

cd [-L | -P] [dir]


cd命令用于改变当前工作目录,新的工作目录为dir,如果没有指定dir,则使用shell系统变量“HOME”的值,参数“-L”表示不跟踪符号链接,如果dir是一个符号链接的目录,结果便是dir本身,“-P”表示物理链接即跟踪符号链接,如果dir是一个符号链接的目录,结果则是dir指向的实际物理目录,默认为“-L”。执行成功时退出状态为0,否则为1。

在shell中,有几个特殊的目录,列举如下:

~    表示用户主目录
/    表示根目录
-    表示最近一次的工作目录即系统变量“OLDPWD”的值
.    表示当前目录
..    表示上一层目录即父目录


2、getopts

在shell中,内建(builtin)命令getopts,格式如下:

getopts optstring name [args]


getopts命令用于分析shell中的位置参数,比如说执行shell脚本的参数、shell函数的参数。

optstring包含待识别的选项字符,选项字符不可以是冒号和问号,如果一个选项字符后面跟着冒号,这个选项就要接受一个参数,参数与选项间以空格分隔。

每次执行getopts时,name保存了当前的选项字符,结束时name的值为一个问号,遇到了无效选项时也存储问号,如果有选项参数,则保存在了系统变量OPTARG中,下一个待处理的参数下标保存在了系统变量OPTIND中,OPTIND在当前shell启动或shell脚本执行时被设置为1,而后随着getopts的执行而变化,如果在同一个shell中需要重新执行getopts分析位置参数,就需要手动重置OPTIND的值了。getopts结束时,其退出状态大于0。

一般情况下,getopts会分析位置参数,但是如果args包含了更多的参数时,getopts就会分析args指定的参数了。

getopts错误报告有两种方式,一种是optstring的第一个字符,如果为冒号,则不会报告错误信息;另一种是系统变量OPTERR,默认为1,如果设置为0,则不会报告错误信息。只有当optstring的第一个字符不为冒号,且OPTERR不为0时,才会报告错误信息。

下面是使用了getopts的一个例子:

$ cat test.sh
while getopts a:b name
do
echo "name: $name"
echo "OPTARG: $OPTARG"
echo "OPTIND: $OPTIND"
echo "----------"
done
echo "name: $name"
echo "OPTARG: $OPTARG"
echo "OPTIND: $OPTIND"
$ bash test.sh -a test -b
name: a
OPTARG: test
OPTIND: 3
----------
name: b
OPTARG:
OPTIND: 4
----------
name: ?
OPTARG:
OPTIND: 4
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: