需要帮助理解这个脚本在做什么

需要帮助理解这个脚本在做什么
if [ $# -ne 1 ]
then
   echo Usage: $0 DIRECTORY
   exit 1

elif [ ! -d $1 ]
then
   echo $1 is not a directory
   exit 2
fi
directory=$1
cd $directory
files=*
echo $directory
echo $files
exit 0

到目前为止,试图打破它

  • $#是剩余参数的数量
  • [是测试命令
  • -ne是数字“不等于”运算符。if [ $# -ne 1 ]测试是否只有一个参数(左)也是如此。

在你的第二个例子中:

  • !意味着不
  • -d表示输出目录
  • $1是第一个剩余参数

答案1

复制您提供的脚本shellcheck.com并修复它发现的所有问题后:

  • 失踪的她邦
  • 许多缺失的引号
  • 确保如果 cd 失败,脚本也会失败
  • 的赋值files=*相当于files="*"这意味着变量将仅包含一个*字符。通过将整个文件列表分配给files.

脚本变为:

#!/bin/sh -

if [ "$#" -ne 1 ]                  # check that there is one argument given.
then
    echo "Usage: $0 DIRECTORY"     # inform the user how to use the script.
    exit 1
elif [ ! -d "$1" ]                 # check that the argument is a directory.
then
    echo "$1 is not a directory"   # inform the user if on error.
    exit 2
fi

directory=$1
cd "$directory" || exit 3          # change to that directory
set -- *                           # get a list of files inside
files="$*"
echo "$directory"                  # Print the name
echo "$files"                      # Print the file list.
exit 0

仍然存在一些更高级别的问题,但脚本正在评论中进行解释。

整个脚本列出了目录中的文件。

相关内容