Aru*_*nga -3 shell-script arguments
我需要编写一个 shell 脚本来显示文件中的单词、字符和行的总数,但文件名是“作为命令行参数给出的”。这是什么意思,我该如何使用它?
如果文件名作为命令行参数给出,这意味着您的脚本被调用为
./myscript.sh some-file-name
Run Code Online (Sandbox Code Playgroud)
即,文件名作为命令行上的参数给出。
因此,脚本位置参数列表的第一个元素将自动填充文件名。位置参数是值$1
、$2
、$3
等(有$#
这些),在这种情况下,只$1
包含某些内容(给定的文件名)。
要在脚本中使用给定的文件名,请使用"$1"
. 要获得更易读的代码,请将其分配给命名的 shell 变量:
./myscript.sh some-file-name
Run Code Online (Sandbox Code Playgroud)
上面的脚本另外验证给定的文件名是否存在并且是一个常规文件(不是例如目录),或者一个到常规文件的有效符号链接。
附带说明:当编写需要用户提供一个或多个文件名的脚本时,最好安排脚本从命令行获取文件名,例如上面的例子。另一种方法是交互地或从文件中读取文件名,对于无法使用 shell 的文件名通配符和/或制表符完成功能来给出正确文件名的用户来说是很尴尬的。也可能无法以交互方式键入某些文件名。
如果您只想要计算文本文件中的单词、字符和行数的功能,那么该wc
实用程序已经完成了此操作:
#!/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"
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,该文件.zsh_history
有 7824 行、35317 个单词和 333801 个字符。
请参阅man wc
您的系统上。