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
仍然存在一些更高级别的问题,但脚本正在评论中进行解释。
整个脚本列出了目录中的文件。