我希望用户能够命名要创建的文件,然后将脚本的输出重定向到该文件。该脚本将创建一个长目录列表并计算该目录中的文件数量。这是我到目前为止所拥有的:
echo -n "Please enter the name of a file to be created: "
read FILENAME
touch FILENAME
ls -l exampledir
echo
ls -l exampledir | wc -l
我可能没有正确使用 read,我不太确定。
编辑
我已经弄清楚了大部分内容,这是新代码:
echo -n "Please enter the name of a file to be created: "
read FILENAME
ls -l Assign_7 > FILENAME
echo >> FILENAME
ls -l Assign_7 | wc -l >> FILENAME
我唯一不明白的是如何将文件命名为用户输入的名称。它里面有正确的东西,但现在该文件总是被称为 FILENAME
第二次编辑
弄清楚了。只需要在每个文件名前添加 $
答案1
非常简单:
#/bin/bash
echo -n "Please enter the name of a file to be created: "
read FILENAME
ls -l Assign_7 > $FILENAME
echo >> $FILENAME
ls -l Assign_7 | wc -l >> $FILENAME
这称为Parameter Expansion
,请参阅man bash
以获得完整说明。
此外,还有一种更短的形式,可以稍微简化脚本,并使bash
输出文件只打开一次:
#/bin/bash
echo -n "Please enter the name of a file to be created: "
read FILENAME
exec > $FILENAME
ls -l Assign_7
echo ""
ls -l Assign_7 | wc -l
后一种形式通过执行命令将当前 shell 重定向stdout
到文件exec > $FILENAME
,因此 shell 执行的所有后续命令的输出也定向到该文件。