終了コード文を含むIf文

終了コード文を含むIf文

私は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

  1. 次にgrep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'ANDを表示します。echo is NOT currently logged on 次に、コード1でスクリプトを終了します。

ユーザーがすでにログインしている場合(終了コード0が返されます):who | grep $userid

  1. 次にgrep "$userid" /etc/passwd | cut -d: -f5 | sort | sed 's/^\(.*\), \(.*\)$/\2 \1/'ANDを表示します。echo is currently logged on その後、コード0でスクリプトを終了します。

ユーザーが有効であることを確認してください。

ユーザーが無効な場合(終了コード1が返されます):grep $userid /etc/passwd

  1. それから見なければなりません。echo "The user you entered, $userid is not a valid user on this system."

ユーザーが有効な場合(終了コード0が返されます):grep $userid /etc/passwd

このスクリプトをどのように書くべきですか?全体の構造は何ですか?構造/設定に問題があります。

答え1

これは宿題のように見えるので、ツールといくつかのヒントだけをお知らせします。

  1. スクリプトに引数が指定されていない場合$1(スクリプトの最初の引数)は空になります。を使用してこれをテストできます[[ -z $1 ]]。エラーを表示したい場合多すぎるパラメータ、テストパラメータの数[[ $# -eq 1 ]](単一パラメータに対して正しい)。

  2. このコマンドを使用してユーザーエントリをインポートgentent passwd "$username"できます。ユーザーが存在しない場合、コマンドは失敗し、ゼロ以外の終了状態を返します。これは、存在しないユーザーに対する反応を使用できることを意味します。passwd$usernameif ! getent passwd "$username" >/dev/null; then ...; fi$username

  3. passwdユーザー項目フィールド5通常ユーザーのフルネームを含めます(実際には「名前」形式であるという保証はありません)。エントリの末尾に追加のコンマがある可能性があり、それらを削除する必要があります。getent passwd "$username"usingの出力を解析してcut -d: -f 55番目のフィールドを取得し、最初のコンマを削除するために使用できますname=${name%%,*}

    一部のシステムでは、ユーザーのフルネームに1&文字を含めることができます。このようなシステムでは、この&文字をユーザー名に置き換える必要があります(System &ユーザー名operatorはになりますSystem operator)。 Linuxが通常これらの作業を実行しているかどうかはわかりませんが、うまくいきますname=${name/&/$username}

  4. このwhoユーティリティは現在ログインしているユーザーのリストを出力します。$username一致させるには。を使用して単語の終わりをgrep -e "^$username\>"一致させるため、orを見つけると一致しません。声明に役立ちます。\>antonyantongrep -qif

コード構造は次のとおりです。

  1. 無効な引数を確認して処理します(欠落:読み取り、多すぎる:終了または最初に使用)。声明if
  2. 無効なユーザー名を確認して処理してください。声明if
  3. ユーザーのフルネームを取得します。コマンド置換による変数の割り当て。
  4. ユーザーがログイン(および出力)されていることを確認してください。分岐がifある可能性がある文ですelse

このスクリプトにはループがないので、ifステートメントと変数の割り当てがたくさんあります。

関連情報