ユーザーにユーザー名を尋ね、ユーザーのホームディレクトリがあることを確認して、有効であることを確認するスクリプトを作成したいと思います。ユーザー名が存在する場合は、事前定義された.txtファイルからユーザーに電子メールを送信する必要があります。ユーザーが存在しない場合は、有効なユーザー名が指定されるまで持続する必要があります。また、「終了」という単語がユーザー名で送信されたら、スクリプトを終了する必要があります。これが私がこれまでにしたことです:
#!/bin/bash
echo "Input your username"
dir="/home"
read username
if [$username -e $dir]
then
cat Message.txt | mailx -s "Subject" $username
else
echo "The user does not exist. Please type a valid username."
fi
メッセージのある部分は大丈夫だと思いますが(わかりませんが)、終了と入力の検証に問題があります!
答え1
ディレクトリが存在するかどうかをテストするには、次のようにします。
if [ -d somepath ]; then ...; fi
[
と周辺スペースを参照してください]
。あなたの場合はsomepath
そうです"$dir/$username"
。したがって、テストは次のようになります。
if [ -d "$dir/$username" ]; then ...; fi
mailx
また、コード内の呼び出しなどの変数拡張には常に二重引用符を使用する必要があることに注意してください。
cat
+pipeを書くと簡単になります。mailx
mailx -s 'Subject' "$username" <Message.txt
getent passwd "$username"
有効なユーザー名をテストするもう1つの方法は、終了ステータスを実行してテストすることです。
if getent passwd "$username" >/dev/null; then
: valid user
else
: invalid user
fi
daemon
ただし、これはサービスユーザーアカウント(一般ユーザーなど)に違いはありません。
スクリプトの最後の一般的な説明は、スクリプトを完了するためにスクリプト引数からユーザー名を読み取ることがより合理的である可能性があることです。
./myscript "username"
"$1"
その後、スクリプト内で代わりに使用でき"$username"
(または割り当てusername=$1
)、対話型読み取りを呼び出すことはありませんread
。これにより、他の非対話型スクリプトからスクリプトを呼び出すことができます(この場合は役に立たないかもしれません)。
これはまた、無効なユーザー名でスクリプトを実行するとエラーメッセージが表示され、新しい正しい名前でスクリプトを単に再実行できるため、不必要に複雑な入力検証ループ(および要件exit
)形式を実行する必要がないことを意味しますします。