スクリプトをいじっています。実行すると新しいディレクトリの名前を入力するプロンプトが表示され、それを作成してから複数のファイルを作成し、行をエコーし、すべて削除するスクリプトを作成できます。
私がやりたいのは、それをわずかにモーフィングして、ディレクトリ自体をすべて作成して名前を付けることです!
私は知っている意味のない運動のようですが、それをいじることは私が学ぶ最良の方法です。
現在のスクリプトは次のとおりです。
#!/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"
入力からNEW_DIR
の値を取得するためにread
コマンドを使用する代わりに、NEW_DIR変数のハードコーディングされた値を次の方法:
スクリプトの次の行を置き換えます。
read NEW_DIR
次の行で:
NEW_DIR="new_dir_hard_coded_value"
bash-scripting-tutorial/bash-variables に関する詳細情報へのリンク
驚きが必要な場合は、名前をハードコーディングする代わりに、次のような手法を使用してランダムな文字列を生成できます。
NEW_DIR=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w8 | head -n1)
これにより、NEW_DIR
が8文字の英数字の文字列に設定されます。スクリプトを実行するたびに、新しいディレクトリには異なるランダムな名前が付けられます...
または、ランダムなWordを取得するには、/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"
...
ユーザー入力を求める代わりに、変数代入演算子(=)を使用して、値をスクリプトにハードコーディングできます。したがって、次の2行は、
echo "作成するディレクトリ名を指定:" read NEW_DIR
1行で置き換えることができます。
NEW_DIR = "whatever_name_you_please"
ところで、これは質問に関係ないことはわかっていますが、スクリプトで使用したfor
ループでは、範囲の短縮コードを書くことができます。 9 8 7 6 5 4 3 2 1 0
の代わりに、次のように書くことができます。
{9..0}のn
さらに一歩先を行くこともできます。フォルダー名の提案を提供するように「読み取り」を指示したり、リターンを押して受け入れたり、好きなように変更したりできます。
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