执行脚本时如何处理参数

执行脚本时如何处理参数

执行脚本时如何处理参数

我的代码是:

#!/bin/bash

DIR="$1"

if [ DIR eq $1 ]
then
    echo -n "total directories:" ; find $DIR -type d | wc -l
    echo -n "total files:" ; find $DIR -type f | wc -l
else
    echo " pass parameters"
fi

当我使用脚本名称 ( ./countfiledirs) 执行时,它显示为:

./countfiledirs: line 4: [: DIR: unary operator expected
 pass parameters

如果我./countfiledirs在不传递参数的情况下执行,它应该显示如下:

pls pass arguments.

如果我执行 ./countfiledirs 并将参数传递为 ./countfiledirs /usr/share ,它应该显示如下输出:

total directories:145
total files:254

答案1

你的错误在这里:

if [ DIR eq $1 ]

您没有使用变量,这是简单的 string DIR。你想要的是:

if [ "$DIR" = "$1" ]

但是,由于您正在设置DIR="$1",因此根据定义该测试将始终为真。另外,当$1为空时,$DIR命令find也会在当前目录上运行。对于 的许多版本find,这些命令是等效的:

find . -name foo
find -name foo

如果没有目标目录,find将搜索.当前目录。因此,脚本的工作版本将是:

#!/bin/bash

## Avoid using UPPER CASE variable names in bash.
dir="$1"

## Check if $dir exists
if [ -e "$dir" ]
then
    printf "total directories: %s\n" $(find "$dir" -type d | wc -l)
    printf "total files: %s\n" $(find "$dir" -type f | wc -l)
else
    echo " pass parameters"
fi

传递给 bash 脚本的参数数量保存为$#,所以你也可以这样做

if [ $# -lt 1 ]
then
    echo "pass parameters"
    exit
fi

相关内容