我正在摆弄脚本,我可以创建一个脚本,当运行时提示我输入新目录的名称,创建它,然后创建几个文件,回显行,然后将其全部删除。
我想要做的是稍微改变它以便它能够自行创建并命名目录!
我知道这似乎是毫无意义的练习,但摆弄它是我学习的最好方法。
这是我当前的脚本:
#!/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