如何在Bash中处理基本命令行参数?

时间:2016-05-09 21:22:01

标签: bash shell

所以我今天开始看看使用vim进行脚本编写,我很失落,并且正在寻找一些帮助。

对于我的第一个项目,我想将文件作为命令行参数处理,如果用户执行此脚本时未包含文件,则应显示用法消息,然后退出程序。 / p>

我不知道从哪里开始,我需要和if ... then声明,还是什么?

2 个答案:

答案 0 :(得分:3)

稍后保存vim并尝试一次学习一件事。更简单的文本编辑器称为nano

现在,至于检查文件作为参数,否则显示用法消息,这是一种典型的模式:

PROGNAME="$0"

function show_usage()
{
    echo "Usage: ${PROGNAME} <filename>" >&2
    echo "..." >&2

    exit 1
}

if [[ $# -lt 1 ]]; then
    show_usage
fi

echo "Contents of ${1}:"
cat "$1"

让我们打破这一点。

PROGNAME="$0"

$0是脚本的名称,因为它是在命令行上调用的。

function show_usage()
{
    echo "Usage: ${PROGNAME} <filename>" >&2
    echo "..." >&2

    exit 1
}

这是打印&#34;用法&#34;的功能。消息并退出并显示失败状态代码。 0是成功的,0以外的任何内容都是失败的。请注意,我们将echo重定向到&2 - 这会在标准错误上打印使用消息,而不是标准输出。

if [[ $# -lt 1 ]]; then
    show_usage
fi

$#是传递给脚本的参数数量。如果该数字小于1,则打印使用信息并退出。

echo "Contents of ${1}:"
cat "$1"

$1是文件名 - 脚本的第一个参数。我们可以在这里进行任何我们想要的处理,$1是文件名。希望这有帮助!

答案 1 :(得分:1)

我认为您正在询问如何编写需要将文件作为命令行参数的bash脚本,如果出现问题则退出使用消息:

#!/bin/bash

# check if user provided exactly one command-line argument:
if [ $# -ne 1 ]; then
  echo "Usage: `basename "$0"` file"
  exit 1
# now check if the provided argument corresponds to a real file
elif [ ! -f "$1" ]; then
  echo "Error: couldn't find $1."
  exit 1
fi

# do things with the file...
stat "$1"
head "$1"
tail "$1"
grep 'xyz' "$1"