-e和-ne在bash脚本中的含义是什么?

时间:2015-12-03 22:02:07

标签: bash

#!/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/*,我不知道这意味着什么。 有什么帮助吗?

2 个答案:

答案 0 :(得分:5)

if [ $# -ne $EXPECTED_ARGS ]

$#是一个表示传递的参数数量的变量。该行检查它是否与另一个变量$EXPECTED_ARGS不同(“不等于”)。

if [ ! -e $1 ]

这是检查文件系统中是否存在$1$1positional 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/*表示您的第一个参数是一个目录,并循环遍历此目录中的所有文件。