常见 Bash 内置变量介绍

前端之家收集整理的这篇文章主要介绍了常见 Bash 内置变量介绍前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@L_301_10@

自动将脚本的名称保存在内置变量 $0 中。因为 $0 基于的是实际的脚本文件名称,而不是在脚本中进行硬编码,所以在重命名脚本文件名称后,不需要修改脚本的内容。比如下面的脚本片段:

#!/bin/ARGS=<span style="color: #800080">3 # 这个脚本需要 <span style="color: #800080">3<span style="color: #000000"> 个参数.
E_BADARGS=<span style="color: #800080">65<span style="color: #000000"> # 传递给脚本的参数个数不对.
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Args number is : $#<span style="color: #800000">"
<span style="color: #0000ff">echo $<span style="color: #800080">0
<span style="color: #0000ff">if [ $# -ne <span style="color: #800000">"<span style="color: #800000">$ARGS<span style="color: #800000">"<span style="color: #000000"> ]

测试脚本的参数个数。

<span style="color: #0000ff">then
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Usage: $(basename $0) first-parameter second-parameter third-parameter<span style="color: #800000">"<span style="color: #000000">
exit $E_BADARGS
<span style="color: #0000ff">fi<span style="color: #000000">

开始干正事儿

代码中我们使用了 $(basename $0) 的写法,这是因为 $0 会包含脚本文件的路径,为了让输出看起来清爽一些,我用 $(basename $0) 去掉了脚本的路径名称,下面是运行的结果:

#!/bin/ $ $ $

用法请参考 $0 中的示例。

arg $*

arg

arg

用法如下:

[ = ]; = ARG [ = ]; = [ -z ];

代码:

还常常与 命令一起使用来丢弃参数 $!/bin//test. 调用这个脚本 # # # 都会丢弃$ 将包含剩下的参数.

#!/bin/set -- <span style="color: #800000">"<span style="color: #800000">First one<span style="color: #800000">" <span style="color: #800000">"<span style="color: #800000">second<span style="color: #800000">" <span style="color: #800000">"<span style="color: #800000">third:one<span style="color: #800000">" <span style="color: #800000">"" <span style="color: #800000">"<span style="color: #800000">Fifth: :one<span style="color: #800000">"<span style="color: #000000">

设置这个脚本的参数,$<span style="color: #800080">1,$<span style="color: #800080">2<span style="color: #000000">,等等.

index=<span style="color: #800080">1<span style="color: #000000"> # 起始计数.
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Listing args with \"\$@\":<span style="color: #800000">"
<span style="color: #0000ff">for arg <span style="color: #0000ff">in <span style="color: #800000">"<span style="color: #800000">$@<span style="color: #800000">"
<span style="color: #0000ff">do
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Arg #$index = $arg<span style="color: #800000">"<span style="color: #000000">
let <span style="color: #800000">"<span style="color: #800000">index+=1<span style="color: #800000">"
<span style="color: #0000ff">done<span style="color: #000000"> # $@ 把每个参数都看成是单独的单词.
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Arg list seen as separate words.<span style="color: #800000">"

$ &]

$ &=$! &=$! $pid2 # 等待第二个后台进程结束

代码保存在 test.sh 文件中:

#!/bin/<span style="color: #0000ff">echo $_ # ./test.<span style="color: #0000ff">sh

<span style="color: #0000ff">du >/dev/<span style="color: #0000ff">null<span style="color: #000000"> # 这么做命令行上将没有输出.
<span style="color: #0000ff">echo $_ # <span style="color: #0000ff">du

<span style="color: #0000ff">ls -al >/dev/<span style="color: #0000ff">null<span style="color: #000000"> # 这么做命令行上将没有输出.
<span style="color: #0000ff">echo $_ # -<span style="color: #000000">al (这是最后的参数)

:
<span style="color: #0000ff">echo $_ # :

用法,可以直接进入创建的目录:

$ hello && cd $_

#!/bin/--d -v golang.org/x/net/-u github.com/jstemmer/go-junit--v >& >=$?/bin/go-junit-report < tmp >exit ${status}

文件的路径:

用户 ID。

用户ID号,是当前用户用户标识号,记录在 /etc/passwd 文件中。这是当前用户的真实 id,即使只是通过使用 su 命令来临时改变为另一个用户标识,这个 id 也不会被改变。$UID 是一个只读变量,不能在命令行或者脚本中修改它。

用户的 home 目录,一般是 /home/username。

修改的,比如在分析逗号分隔的数据文件时,就可以设置为逗号。注意 $* 使用的是保存在 $IFS 中的第一个字符来分隔位置参数的。

#!/bin/output_args_one_per_line()
{
<span style="color: #0000ff">for<span style="color: #000000"> arg
<span style="color: #0000ff">do <span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">[$arg]<span style="color: #800000">"
<span style="color: #0000ff">done<span style="color: #000000">
}

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">IFS=\" \"<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">-------<span style="color: #800000">"<span style="color: #000000">

IFS=<span style="color: #800000">" <span style="color: #800000">"<span style="color: #000000">
var=<span style="color: #800000">"<span style="color: #800000"> a b c <span style="color: #800000">"<span style="color: #000000">
output_args_one_per_line $var
<span style="color: #0000ff">echo; <span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">IFS=:<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">-----<span style="color: #800000">"<span style="color: #000000">

IFS=<span style="color: #000000">:
var=<span style="color: #800000">"<span style="color: #800000">:a::b:c:::<span style="color: #800000">" # 与上边一样,但是用<span style="color: #800000">" <span style="color: #800000">"替换了<span style="color: #800000">"<span style="color: #800000">:<span style="color: #800000">"<span style="color: #000000">.
output_args_one_per_line $var

使用 : 后,冒号前后的空字符也被解析了。

exit <span style="color: #800080">0

PATH=${PATH}:/opt/bin

快速的回到前一个工作目录:

$ cd -

#!/bin/E_WRONG_DIRECTORY=<span style="color: #800080">73
<span style="color: #0000ff">clear<span style="color: #000000"> # 清屏.
TargetDirectory=/home/nick/<span style="color: #000000">testdir
cd $TargetDirectory
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Deleting stale files in $TargetDirectory.<span style="color: #800000">"

<span style="color: #0000ff">if [ <span style="color: #800000">"<span style="color: #800000">$PWD<span style="color: #800000">" != <span style="color: #800000">"<span style="color: #800000">$TargetDirectory<span style="color: #800000">"<span style="color: #000000"> ]
<span style="color: #0000ff">then<span style="color: #000000"> # 防止偶然删错目录.
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Wrong directory!<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">In $PWD,rather than $TargetDirectory!<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Bailing out!<span style="color: #800000">"<span style="color: #000000">
exit $E_WRONG_DIRECTORY
<span style="color: #0000ff">fi

<span style="color: #0000ff">rm -rf <span style="color: #000000"> # 删除文件
<span style="color: #0000ff">rm .[A-Za-z0-<span style="color: #800080">9]
<span style="color: #000000"> # 删除点文件

<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Done.<span style="color: #800000">"
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">Old files deleted in $TargetDirectory.<span style="color: #800000">"<span style="color: #000000">
exit <span style="color: #800080">0

提示符,可以在命令行中见到它,笔者的 Ubuntu16.04 中为:

添加了一些字体颜色的设置等内容

提示符,当我们使用 -x 选项来调用脚本时,这个提示符会出现在每行输出的开头,默认为 "+":

set -

猜你在找的Bash相关文章