我需要编写一个 shell 脚本来显示文件中的单词、字符和行的总数,但文件名是“作为命令行参数给出的”。这是什么意思以及如何使用它?
答案1
如果文件名作为命令行参数给出,则意味着您的脚本被调用为
./myscript.sh some-file-name
即,文件名作为命令行上的参数给出。
因此,脚本列表的第一个元素位置参数将自动填充文件名。位置参数是值$1
、$2
、$3
等(有$#
这些),在本例中,仅$1
包含某些内容(给定的文件名)。
要在脚本中使用给定的文件名,请使用"$1"
.要获得更具可读性的代码,请将其分配给命名的 shell 变量:
#!/bin/sh
# Pick out the filename given on the command line.
name=$1
# Verify that the given name is indeed a (regular) file,
# or a symbolic link to a regular file.
if [ ! -f "$name" ]; then
# It's not, so output error message and exit.
printf 'The given name "%s" is not a regular file!\n' "$name" >&2
exit 1
fi
printf 'The given filename is "%s"\n' "$name"
上面的脚本还验证给定的文件名是否存在并且是常规文件(例如不是目录),或者是常规文件的有效符号链接。
附注:当编写需要用户提供一个或多个文件名的脚本时,最好安排脚本从命令行获取文件名,例如上面的例子。另一种方法是交互地或从文件中读取文件名,这对于用户来说很尴尬,因为用户无法使用 shell 的文件名通配符和/或制表符补全工具来给出正确的文件名。也可能无法交互地键入某些文件名。
如果你只是想要功能性计算文本文件中的单词、字符和行数,那么该wc
实用程序已完成此操作:
$ wc .zsh_history
7824 35317 333801 .zsh_history
在上面的示例中,该文件.zsh_history
有 7824 行、35317 个单词和 333801 个字符。
在您的系统上查看man wc
。