电脑技术学习

对话 UNIX,第 6 部分: 通过脚本实现操作的自动化

dn001

#! /bin/zsh
if [[ -z $1 || $1 == "--help" ]]
then
  echo "usage: $0 Machine [machine ...]
fi
foreach machine
  rsync -e ssh --times --perms --recursive --delete $HOME $machine:
end

  命令行上的每个空格分隔的字符串变成了位置参数,包括所调用的脚本的名称。因此,命令 synch.zsh 只有一个位置参数 $0。synch.zsh --help 命令有两个位置参数:$0 和 $1,其中 $1 是字符串 --help。

  所以,清单 3 表示“如果第一个位置参数为空(-z 操作符测试空字符串)或(由 || 表示)如果第一个参数等于‘—help’,则打印用法信息。(如果您刚开始编写脚本,可以考虑在每个脚本中提供用法信息作为提示。它提醒其他人——甚至您自己,如果您忘了的话——如何使用该脚本。)

  短语 [[ -z $1 || $1 == "--help" ]] 是 if 语句的 条件,但您也可以将同样的条件子句用作命令,并将其与其他命令组合使用以控制通过脚本的流。请查看清单 4。它枚举您的 $PATH 中的所有可执行命令,并将条件与其他命令组合使用以执行适当的工作。

  清单 4. 列出 $PATH 中的命令

#! /bin/zsh
DirectorIEs=(`echo $PATH | column -s ':' -t`)
for directory in $directories
do
 [[ -d $directory ]] || continue
 
 pushd "$directory"
 
 for file in *
 do
   [[ -x $file && ! -d $file ]] || continue
   echo $file
 done
 
 popd
done | sort | uniq

标签: