自动将脚本的名称保存在内置变量 $0 中。因为 $0 基于的是实际的脚本文件名称,而不是在脚本中进行硬编码,所以在重命名脚本文件的名称后,不需要修改脚本的内容。比如下面的脚本片段:
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) 去掉了脚本的路径名称,下面是运行的结果:
用法请参考 $0 中的示例。
用法如下:
代码:
设置这个脚本的参数,$<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">"
代码保存在 test.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 $_ # :
用法,可以直接进入创建的目录:
文件的路径:
用户 ID。
用户ID号,是当前用户的用户标识号,记录在 /etc/passwd 文件中。这是当前用户的真实 id,即使只是通过使用 su 命令来临时改变为另一个用户标识,这个 id 也不会被改变。$UID 是一个只读变量,不能在命令行或者脚本中修改它。
用户的 home 目录,一般是 /home/username。
修改的,比如在分析逗号分隔的数据文件时,就可以设置为逗号。注意 $* 使用的是保存在 $IFS 中的第一个字符来分隔位置参数的。
{
<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
快速的回到前一个工作目录:
<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 选项来调用脚本时,这个提示符会出现在每行输出的开头,默认为 "+":