web-dev-qa-db-ja.com

ディレクトリを作成する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"
7

入力からNEW_DIRの値を取得するためにreadコマンドを使用する代わりに、NEW_DIR変数のハードコーディングされた値を次の方法:

スクリプトの次の行を置き換えます。

read NEW_DIR    

次の行で:

NEW_DIR="new_dir_hard_coded_value"

bash-scripting-tutorial/bash-variables に関する詳細情報へのリンク

5
Yaron

驚きが必要な場合は、名前をハードコーディングする代わりに、次のような手法を使用してランダムな文字列を生成できます。

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"
...
5
Zanna

ユーザー入力を求める代わりに、変数代入演算子(=)を使用して、値をスクリプトにハードコーディングできます。したがって、次の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 
3

さらに一歩先を行くこともできます。フォルダー名の提案を提供するように「読み取り」を指示したり、リターンを押して受け入れたり、好きなように変更したりできます。

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
3
stealz