#!/bin/bash
# number of expected arguments
EXPECTED_ARGS=1
# exit value if the number of arguments is wrong
E_BADARGS=1
if [ $# -ne $EXPECTED_ARGS ]
then
echo "Usage: `basename $0` {arg}"
exit $E_BADARGS
fi
if [ ! -e $1 ]
then
echo "file $1 does not exist"
exit $E_BADARGS
fi
for myfile in $1/*
do
if [ -d "$myfile" ]
then
echo "$myfile (DIR)"
elif [ -f "$myfile" ]
then
echo "$myfile"
fi
done
我是bash的新手,我无法弄清楚!
中if[ ! -e $1]
的含义以及$1/*
中for myfile in $1/*
的含义。到目前为止,我已经考虑if[! -e $1]
好像(不等于第一个参数)(这样做)....这是正确的吗?但那么什么不等于第一个参数? for myfile in $1/*
,我不知道这意味着什么。
有什么帮助吗?
答案 0 :(得分:5)
if [ $# -ne $EXPECTED_ARGS ]
$#
是一个表示传递的参数数量的变量。该行检查它是否与另一个变量$EXPECTED_ARGS
不同(“不等于”)。
if [ ! -e $1 ]
这是检查文件系统中是否存在$1
。 $1
是positional parameter,它是传递给脚本的第一个参数。 See this page了解有关在bash中使用if
的更多信息。
for myfile in $1/*
预计$1
是一个目录,并使用globbing遍历目录中的每个文件。每个文件都加载到变量$myfile
。
脚本存在一些问题,如评论中所述。我做的事情有点不同;将此视为改善它的第一个快速运行:http://pastebin.com/4fbsdrDw
答案 1 :(得分:4)
!
表示NOT,因此if [ ! -e $1 ]
读取“如果第一个参数(类型为文件,目录或链接)不存在,请执行...”(-e
是文件测试运算符的含义“存在”)
for myfile in $1/*
表示您的第一个参数是一个目录,并循环遍历此目录中的所有文件。