“假设文件名作为命令行参数给出”,这是什么意思?

“假设文件名作为命令行参数给出”,这是什么意思?

我需要编写一个 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

相关内容