GNU/Linux >> Linux の 問題 >  >> Linux

[Linux]:簡単なシェルスクリプトを書き始めるときに学ぶ7つのこと

システム管理者は、日常業務を簡単に完了し、他の重要なことに集中できるように、ほとんどのタスクを自動化することを常に考えています。そのようなタスクの1つは、Unixアカウントの作成です。ここでは、シェルスクリプトを使用してUnixアカウントを作成する方法を説明します。シェルスクリプトを作成するこの旅では、タスクは単純に見えますが、多くのことを学ぶことができます!

1。読みやすくするために、スクリプト作成中は標準のガイドラインに従ってください

C、C ++、JAVAなどの他のほとんどのプログラミング言語には、コーディング中に従う一連の「ベストプラクティス」があります。ただし、その名前が示すように、シェルスクリプトは、特別なランタイム環境向けに短時間で作成されたプログラムの一種です。クイックタイムとは、ルールに従わないことを意味します。ベストプラクティスに従うと、スクリプトが読みやすく、再利用可能になり、保守しやすくなります。

したがって、このスクリプトでは、関数を使用してコードをモジュール化します。以下の関数usage()のコードスニペット:

usage()
{
echo "Usage: $PROGNAME  [options]
Options:
-u username,            Provide name for new user account creation
-p password,            Provide complex password
-h help,                display this help message and exit      "
exit 1;
}

この使用法関数は、スクリプトの実行や間違った引数などでヘルプが必要な場合に呼び出されます。

2。シェルスクリプトで引数を受け入れる方法

シェルスクリプトでは、引数の受け入れは次のように行われます:

$0 - Script Name
$1 - First argument
$2 - Second argument
$# - No. of arguments
$@ - All arguments

例:

Tue Oct 29>$./account_creation.sh username password

上記の例では、$ 0はaccount_creation.sh、$ 1はユーザー名、$2はパスワードです。 $#は2を返し、$@はすべての引数を返します。

3。シェルスクリプトで「Getopt」を使用するコマンドラインオプション

コマンドラインオプションを提供することは、スクリプトをユーザーに提示するためのより良い方法です。短いコマンドラインオプションと長いコマンドラインオプションの両方をサポートするスクリプトを作成できます。例:ヘルプメッセージを表示するには、「-h」または「-help」オプションのいずれかを使用できます。一般的な規則では、長いオプションの前にはダブルハッシュが付き、小さいオプションの前にはダッシュが1つあります。以下はコードです:

while getopts ":h:u:p:" OPTION
do
        case "$OPTION" in
        h)
                usage
                ;;
        u)
                USERNAME=${OPTARG}
                ;;
        p)
                PASSWORD=${OPTARG}
                ;;
        \?)
                usage
                ;;
        esac
done

getoptsコマンドは、パラメーターのリストからオプションとオプション引数を取得するKorn/POSIXシェル組み込みコマンドです。 getoptsについて詳しくは、こちらをご覧ください。単純に各コマンドラインオプションでは、ループが実行され、各オプションに対応する値が割り当てられた変数に格納されます。以下は、渡されたパラメータが空かどうかを確認するためのコードスニペットです:

shift $((OPTIND-1))
if [ -z "${USERNAME}" ] || [ -z "${PASSWORD}" ]; then
    usage
fi

4。シェルスクリプトからLinuxコマンドを実行する方法

ここでuseradd アカウントの作成に使用されるLinuxコマンドです。

/usr/sbin/useradd -m ${USERNAME}

ここで、ユーザーがすでに存在する場合、下の画像に示されているstderrとしていくつかの警告が表示される可能性があることに注意する必要があります:

5。 stdoutとstderrを無視/ログファイルにリダイレクトする方法

Bashおよびその他の最新のシェルは、I/Oリダイレクト機能を提供します。 Linuxの標準I/Oストリーム番号は次のとおりです:

処理 名前 説明
0 stdin 標準入力
1 stdout 標準出力
2 stderr 標準エラー

a。 stderrストリームをファイルにリダイレクトする:

$script 2> error.log

b。 stdoutストリームをファイルにリダイレクトする:

$script 1> output.log

c。 stderrとstdoutの両方をファイルにリダイレクトします:

$script  &>file.out

これらのstderrおよびstdoutメッセージを無視したい場合は、ファイルではなく/ dev/nullにリダイレクトしてください。

$script 2>/dev/null

6。シェルスクリプトでコマンドが正常に実行されたことを確認する方法

$?最後に実行されたコマンドまたはスクリプトの戻りコード(ステータスコード)です。 0 ==成功、その他の数字は失敗を意味します

7。シェルスクリプトのif/elseなどの条件文

ほとんどのプログラミング言語とスクリプト言語には、ある種のif / else式があり、シェルスクリプトもそうです。次の表は、許可されるさまざまな式を示しています。

-eq 等しい
-ne 等しくない
-lt 未満
-le 以下
-gt より大きい
-ge 以上

注:他のほとんどの言語とは異なり、 if を使用する場合は、スペースが非常に重要です。 シェルスクリプトのステートメント。

以下のコードは最後のコマンドのステータスコードをチェックし、成功するとパスワードを作成するためにさらに移動します。パスワードが正常に設定されると、アクティビティが正常に完了するように端末にメッセージが表示されます。

# Create User Account
/usr/sbin/useradd -m ${USERNAME} 2>/dev/null
if [ $? -eq "0" ]; then
        echo -e ${PASSWORD} | /usr/bin/passwd ${USERNAME} --stdin >/dev/null
        if [ $? -eq "0" ]; then
             echo "User ${USERNAME} created sucessfully"
        fi
fi
をエコーし​​ます。

完全なスクリプト:ダウンロードリンク

Linuxに関する他の興味深い記事をチェックしてください:

Bashシェルのクイックキーボードショートカット–Linuxのヒント

8つの面白いLinuxコマンド–きっと気に入るはずです!

Linuxでrm-rfコマンドを実行する際のベストプラクティス

Linuxシステム管理者コマンド

Linuxでコマンドをコピーおよび移動するためのプログレスバーを追加するにはどうすればよいですか?

Linuxサーバー時間をネットワークタイムサーバーと同期する方法

RHELマシンでCentOSリポジトリを使用するようにyumを構成する方法

データを回復するための最適なツール[Windows、Linux、DOS、MAC OS X]


Linux
  1. 簡単なシェルスクリプトで配布名とバージョン番号を取得するにはどうすればよいですか?

  2. 実行時にスクリプトでシェルを決定しますか?

  3. Scp用のシェルが必要ですか?

  1. スクリプト ファイルの先頭に #!/bin/bash を配置する必要があるのはなぜですか?

  2. シェルスクリプトの現在のディレクトリ?

  3. Linux シェルの音訳スクリプト

  1. .sh ファイルがマルウェアになる可能性はありますか?

  2. 簡単なシェルスクリプトでディストリビューション名とバージョン番号を取得するにはどうすればよいですか?

  3. クラッシュしたプロセスを再起動する簡単な方法は?