私は Linux/Unix の初心者です。ここに課題があります。すべてをここに投稿するには長すぎます。https://i.stack.imgur.com/v2AJR.jpg
これが私の考えです:
このコードは、ユーザーが引数を入力したかどうかを確認します。else の下に何を入れればよいかわかりません。別のユーザーからここで学んだ which ステートメントについては話したことがないので、使用することは想定されていません。これは単なる基本的なコマンドであり、非常に高度な課題ではありません。
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 ]]
(引数が 1 つの場合は true になります)。コマンドを使用して、ユーザーのエントリ
gentent passwd "$username"
を取得できます。ユーザーが存在しない場合は、コマンドは 0 以外の終了ステータスで失敗します。つまり、 を使用して、存在しないユーザーに対応できます。passwd
$username
if ! getent passwd "$username" >/dev/null; then ...; fi
$username
passwd
ユーザーのエントリの5番目のフィールドいつものユーザーのフルネームが含まれます (「firstname lastname」形式である保証はありません)。エントリの末尾に余分なカンマが含まれている場合があり、削除する必要があります。 をgetent passwd "$username"
使用して出力を解析しcut -d: -f 5
、5 番目のフィールドを取得してから、 を使用して最初のカンマから削除できますname=${name%%,*}
。一部のシステムでは、ユーザーのフルネームに
&
文字が含まれている場合があります。そのようなシステムでは、この文字をユーザー名に置き換える必要があります (ユーザーの&
名前がになるように)。Linux が一般にこれを実行するかどうかはわかりませんが、 を使用すれば実行できます。System &
operator
System operator
name=${name/&/$username}
この
who
ユーティリティは、現在ログオンしているユーザーのリストを出力します。$username
これと照合するには、 を使用しますgrep -e "^$username\>"
。 は\>
単語の末尾に一致するため、egantony
は検索時に一致しませんanton
。または、 はステートメントgrep -q
内で役立ちますif
。
コード構造は次のようになります。
- 無効な引数をチェックして処理します (不足: read、多すぎる: exit または単に first を使用します)。1 つの
if
ステートメント。 - 無効なユーザー名をチェックして処理します。 1 つの
if
ステートメント。 - ユーザーのフルネームを取得します。コマンド置換による変数の割り当て。
- ユーザーがログオンしているかどうかを確認します (および出力します)。 1 つの
if
ステートメントで、else
ブランチが含まれる場合もあります。
このスクリプトにはループがないので、いくつかのif
- ステートメントと変数の割り当てになります。