Bash 脚本创建目录

Bash 脚本创建目录

我正在摆弄脚本,我可以创建一个脚本,当运行时提示我输入新目录的名称,创建它,然后创建几个文件,回显行,然后将其全部删除。

我想要做的是稍微改变它以便它能够自行创建并命名目录!

我知道这似乎是毫无意义的练习,但摆弄它是我学习的最好方法。

这是我当前的脚本:

#!/bin/bash   
echo "Give a directory name to create:"    
read NEW_DIR    
ORIG_DIR=$(pwd)    
[[ -d $NEW_DIR ]] && echo $NEW_DIR already exists, aborting && exit    
mkdir  $NEW_DIR    
cd $NEW_DIR    
pwd    
for n in 9 8 7 6 5 4 3 2 1 0    
do        
touch file$n    
done

ls file?    

for names in file?    
do       
echo This file is named $names > $names    
done

cat file?

cd $ORIG_DIR

rm -rf $NEW_DIR

echo "Goodbye"

答案1

除了使用命令从输入中read获取值之外,您还可以为设置硬编码值NEW_DIR新目录变量如下:

替换脚本中的以下行:

read NEW_DIR    

使用以下行:

NEW_DIR="new_dir_hard_coded_value"

有关更多信息的链接bash 脚本教程/bash 变量

答案2

如果您想要一个惊喜,您可以使用一种技术来生成随机字符串,而不是对名称进行硬编码,例如

NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)

这将设置NEW_DIR为一个由八个字母数字字符组成的字符串。每次运行脚本时,新目录都会有一个不同的随机名称...

或者为了获取一个随机单词,从中挑选一本字典/usr/share/dict/并使用shuf,例如:

$ shuf -n1 /usr/share/dict/british-english
soupier
$ shuf -n1 /usr/share/dict/british-english
penguins

所以

NEW_DIR=$(shuf -n1 /usr/share/dict/british-english)
mkdir "$NEW_DIR"
...

答案3

您可以使用变量赋值运算符 (=) 将值硬编码到脚本中,而不是提示用户输入。因此,以下两行,

echo“给出要创建的目录名称:”
读取 NEW_DIR

可以用一行来代替。

NEW_DIR="随便你叫什么名字"



顺便说一句,我知道这与问题无关,但在for脚本中使用的循环中,您可以为范围编写简写代码。除了9 8 7 6 5 4 3 2 1 0,您还可以将其写为

对于 n 在 {9..0}

答案4

您甚至可以更进一步:您可以告诉“read”为文件夹名称提供一个建议,按回车键接受它或根据需要进行更改:

read -p "Give a directory name to create: " -ei "default_name" NEW_DIR;

这将显示一行:

Give a directory name to create: default_name

结合以上建议,您可以执行以下操作:

# pre-set NEW_DIR to a value or to any random string 
# as suggested in the other answers
NEW_DIR="default_name"

# Prompt for new directory name, suggesting previously selected default answer
read -p "Give a directory name to create: " -ei "$NEW_DIR" NEW_DIR;

请注意,read -p "text" 将提示输入文本并在同一行中要求输入答案。如果您想坚持使用代码并让其要求输入 2 行格式,您可以这样做

echo "Give a directory name to create:"  
read -ei "$NEW_DIR" NEW_DIR

相关内容