私はLinux/Unix初心者です。これは私の課題です。ここにすべてのコンテンツを投稿するには長すぎます。https://i.stack.imgur.com/v2AJR.jpg
これは私の論理です:
このコードは、ユーザーがパラメータを入力したことを確認します。他のものの下に何を入れるべきかわかりません。他のユーザーからどのような声明を学んだかを議論したことがないので、その使用は予想されません。これは基本的なコマンドであり、これは非常に高度な作業ではありません。
if [ $# -ne 1 ]; then
echo Please enter a single, valid user id:
read userid
else
userid=$1
**what goes here?**
fi
ユーザーのフルネーム(Ben Franklinなど)を表示するために、次のコードを書いてテストしました。
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
ユーザーがログインしていることを確認してください。
ユーザーがログインしていない場合(終了コード1が返されます):who | grep $userid
- 次に
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
ANDを表示します。echo is NOT currently logged on
次に、コード1でスクリプトを終了します。
ユーザーがすでにログインしている場合(終了コード0が返されます):who | grep $userid
- 次に
grep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'
ANDを表示します。echo is currently logged on
その後、コード0でスクリプトを終了します。
ユーザーが有効であることを確認してください。
ユーザーが無効な場合(終了コード1が返されます):grep $userid /etc/passwd
- それから見なければなりません。
echo "The user you entered, $userid is not a valid user on this system."
ユーザーが有効な場合(終了コード0が返されます):grep $userid /etc/passwd
このスクリプトをどのように書くべきですか?全体の構造は何ですか?構造/設定に問題があります。
答え1
これは宿題のように見えるので、ツールといくつかのヒントだけをお知らせします。
スクリプトに引数が指定されていない場合
$1
(スクリプトの最初の引数)は空になります。を使用してこれをテストできます[[ -z $1 ]]
。エラーを表示したい場合多すぎるパラメータ、テストパラメータの数[[ $# -eq 1 ]]
(単一パラメータに対して正しい)。このコマンドを使用してユーザーエントリをインポート
gentent passwd "$username"
できます。ユーザーが存在しない場合、コマンドは失敗し、ゼロ以外の終了状態を返します。これは、存在しないユーザーに対する反応を使用できることを意味します。passwd
$username
if ! getent passwd "$username" >/dev/null; then ...; fi
$username
passwd
ユーザー項目フィールド5通常ユーザーのフルネームを含めます(実際には「名前」形式であるという保証はありません)。エントリの末尾に追加のコンマがある可能性があり、それらを削除する必要があります。getent passwd "$username"
usingの出力を解析してcut -d: -f 5
5番目のフィールドを取得し、最初のコンマを削除するために使用できますname=${name%%,*}
。一部のシステムでは、ユーザーのフルネームに1
&
文字を含めることができます。このようなシステムでは、この&
文字をユーザー名に置き換える必要があります(System &
ユーザー名operator
はになりますSystem operator
)。 Linuxが通常これらの作業を実行しているかどうかはわかりませんが、うまくいきますname=${name/&/$username}
。この
who
ユーティリティは現在ログインしているユーザーのリストを出力します。$username
一致させるには。を使用して単語の終わりをgrep -e "^$username\>"
一致させるため、orを見つけると一致しません。声明に役立ちます。\>
antony
anton
grep -q
if
コード構造は次のとおりです。
- 無効な引数を確認して処理します(欠落:読み取り、多すぎる:終了または最初に使用)。声明
if
。 - 無効なユーザー名を確認して処理してください。声明
if
。 - ユーザーのフルネームを取得します。コマンド置換による変数の割り当て。
- ユーザーがログイン(および出力)されていることを確認してください。分岐が
if
ある可能性がある文ですelse
。
このスクリプトにはループがないので、if
ステートメントと変数の割り当てがたくさんあります。