シェルスクリプティングを使用してプログラムを段階的に構築する-パート2

パート1 このシリーズでは、以下を実装する方法を覚えています。

そして以前のものでは、私たちは自分自身を浸しました より良い実践 優れたものを作成するときに従うべき Bash for Linuxのシェルスクリプト、 特に設計の観点から ShebangとBSM(Bash Strict Mode / Strict BashMode)。

GNU / Linuxでシェルスクリプトを作成するためのベストプラクティス-パート1

GNU / Linuxでシェルスクリプトを作成するためのベストプラクティス-パート2

シェルスクリプト

この投稿では、実装する方法を見ていきます Bash forLinuxのシェルスクリプト用の環境変数モジュール、私の例のXNUMXつを取る プログラム(アプリケーション) の事実 シェルスクリプト 呼ばれます Linuxポストインストール-バイセンテニアルスクリプト8.0、しかし最初にの小さな要約 より良い実践 あなたがそれらを心に留めるように:

  • コードをインデントし、
  • コードのセクション間に区切りスペースを追加し、
  • コードについてできるだけコメントしてください。
  • 関数の説明的な名前で変数を作成し、
  • コマンドの置換には、構文VARIABLE = $(コマンド)を使用します
  • 次のモジュールおよび/または変数を使用します:確立されたパスワードの有無にかかわらず、スーパーユーザーおよび許可ユーザーの検証。
  • 次のモジュールおよび/または変数を使用します:オペレーティングシステムの検証(Distro、バージョン、アーキテクチャなど)、
  • モジュール(手順/セクション)を使用して、重要なアクションまたはバッチアクション(アクティビティ/機能)の実行を確認します。
  • ユーザーフレンドリーなインターフェースの提供(ユーザーフレンドリー):ターミナル別(ダイアログを使用したメニューと色付き)および/またはデスクトップ別(ZenityとGxmessageを使用したWindows付き)、
  • 必要に応じて、ユーザーへのウェルカムおよびフェアウェル(メッセージ)のモジュールを含めます。
  • 二重実行検証モジュールを含め、
  • 外部関数やモジュールを使用してスクリプトサイズを合理化し、
  • 他の通訳者への呼びかけを明確かつ明白な方法で呼びかけます。
  • 必要と思われるその他の論理的および合理的な推奨事項を適用します。

これはの例です Bash forLinuxのシェルスクリプト用の環境変数モジュール。 これは、特定の変数または可能性のある変数をすべて含むモジュール(セクション)である必要があります。 シェルスクリプト その実行が必要であるか、必要になるでしょう。 私は個人的に以下を追加します:


###############################################################################
# INICIO DEL MODULO DE VARIABLES DE ENTORNO DEL SCRIPT
###############################################################################

NOM_SCRIPT=lpi_sb8_inicio_2016.sh
# echo $NOM_SCRIPT
# Almacenar como una variable predeterminada el Nombre real del Script

USR1_VALID=sysadmin
# echo $USR1_VALID
# Almacenar como una variable predeterminada el Nombre de Usuario valido que podrá ejecutar el Script.
# Haga una variable por cada Usuario Autorizado.

PASSWD_VALID=lpi*sb8
# echo $PASSWD_VALID
# Almacenar como una variable predeterminada el Nombre de la contraseña valida que permitirá ejecutar el Script.
# Haga una variable por cada contraseña de cada Usuario Autorizado.

S_O_VALID=kali
# echo $S_O_VALID
# Almacenar como una variable predeterminada el tipo de Sistema operativo valido para donde debe ser ejecutado el Script.

HOST_VALID=hostmovil-sysadmin
# echo $HOST_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

IP_VALID=192.168.1.107
# echo $IP_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

MAC_VALID=44:8a:5b:f0:3d:f3
# echo $MAC_VALID
# Almacenar como una variable predeterminada el nombre del host valido donde debe ser ejecutado el Script.

FILE_LOCK=lpi_sb_file_lock.txt
# echo $FILE_LOCK
# Almacenar el nombre de archivo predeterminada por el sistema para evitar doble ejecuciones ó detectar ejecuciones fallidas.

IDSUPERUSER=$(id -u | awk '{print $1}')
# IDSUPERUSER=$(echo $UID)
# IDSUPERUSER=$(getent passwd $USER | cut -d: -f3)
# echo $IDSUPERUSER
# Almacenar IUD del Superusuario root

USER_NAME_1=$(cat /etc/passwd | grep 1000 | cut -d: -f1 | awk '{print $1}')
HOME_USER_NAME_1=/home/$USER_NAME_1
# echo $USER_NAME_1 $HOME_USER_NAME_1
# Almacenar el nombre del usuario 1000 y su /home. Probable unico y primer Usuario del Sistema.

USER_NAME_2=$(cat /etc/passwd | grep 1001 | cut -d: -f1 | sed -n '2p' | awk '{print $1}')
HOME_USER_NAME_2=/home/$USER_NAME_2
# echo $USER_NAME_2 $HOME_USER_NAME_2
# Almacenar el nombre del usuario 1001 y su /home. Probable segundo Usuario del Sistema.

ID_USERNAME_SESSION=$(for i in $(who | sed 1q | cut -c 1-8); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed 1q)
# echo $ID_USERNAME_SESSION
# Almacenar el ID del Nombre del primer usuario (alfabeticamente) detectado conectado (con sesión abierta) en el sistema.

USERNAME_ID_SESSION=$(for i in $(who | sed 1q | cut -c 1-8); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $2}' ; done ; echo $i)
# echo $USERNAME_ID_SESSION
# Almacenar el Nombre del primer usuario (alfabeticamente) detectado conectado (con sesión abierta) en el sistema.

# ID_FIRST_USERNAME=$(for i in 1000 1001 1002 1003 1004; do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed -n '1p')
# echo $ID_FIRST_USERNAME
# Almacenar el ID del Nombre del primer usuario creado en el sistema entre los ID del 1000 al 1005.
# Nota: Solo funciona con la opción -o desactivada del MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM)

# ID_FIRST_USERNAME=$(for i in $(seq 1000 1999); do grep $i /etc/passwd | awk '{print "\t" $1}' | tr -d '[A-Za-z]' | sed 's/::x*//' | cut -c 1-5 | awk '{print $1}' ; done | sed -n '1p')
# echo $ID_FIRST_USERNAME
# Almacenar el ID del Nombre del primer usuario creado en el sistema.
# Nota: Solo funciona con la opción -o desactivada del MODO BASH ESTRICTO ó SEGURO (Bash Strict Mode / BSM)

UBICACION=$(echo $PWD)
# UBICACION=$(pwd)
# echo $UBICACION
# Almacenar ruta de ejecución del Script LPI-SB

FECHA_SISTEMA_AN=$(date +"%d %b %y")
# echo $FECHA_SISTEMA_AN
# Almacenar la fecha  Alfanumerica actual del Equipo

FECHA_SISTEMA_N=$(date +"%d %m %y")
# echo $FECHA_SISTEMA_N
# Almacenar la fecha Numerica actual del Equipo

DIA_ACTUAL=$(date +"%d")
# echo $DIA_ACTUAL
# Almacenar el día actual del Equipo

MES_ACTUAL_A=$(date +"%b")
# echo $MES_ACTUAL_A
# Almacenar el mes alfabetico actual del Equipo

MES_ACTUAL_N=$(date +"%m")
# echo $MES_ACTUAL_N
# Almacenarel mes numerico actual del Equipo

ANO_ACTUAL_2C=$(date +"%y")
# echo $ANO_ACTUAL_2C
# Almacenar el año (con 2 cifras) actual del Equipo

ANO_ACTUAL_4C=$(date +"%Y")
# echo $ANO_ACTUAL_4C
# Almacenar el año (con 4 cifras) actual del Equipo

HORA_SISTEMA=$(date +"%H:%M")
# echo $HORA_SISTEMA
# Almacenar la Hora actual del Equipo

HORA_ACTUAL=$(date +"%H")
# echo $HORA_ACTUAL
# Almacenar la Hora actual del Equipo

MINUTOS_ACTUAL=$(date +"%M")
# echo $MINUTOS_ACTUAL
# Almacenar la Hora actual del Equipo

TIPO_S_O_L=$(uname -o)
# echo $TIPO_S_O_L
# Almacena el nombre largo del tipo de Sistema Operativo encontrado.

TIPO_S_O_C=$(uname -s)
# echo $TIPO_S_O_C
# Almacena el nombre corto del tipo de Sistema Operativo encontrado.

NOM_DISTRO_L=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\")
# NOM_DISTRO_L=$(lsb_release -d | sed 's/Description://')
# echo $NOM_DISTRO_L
# Almacena el nombre largo de la Distro detectada.

NOM_DISTRO_C=$(cat /etc/os-release | grep NAME | grep -v "VERSION" | sed -n '2p' | cut -f2 -d\" | awk '{print $1}')
# NOM_DISTRO_C=$(lsb_release -d | sed 's/Description://' | awk '{print $1}')
# echo $NOM_DISTRO_C
# Almacena el nombre corto de la Distro detectada.

ID_DISTRO=$(cat /etc/os-release | grep ID | grep -v "VERSION_ID" | grep -v "ID_LIKE" | sed 's/ID=//' | sed 's/"//g')
# ID_DISTRO=$(lsb_release -i | awk '{print $3}')
# echo $ID_DISTRO
# Almacena el ID de la Distro detectada.

VER_DISTRO=$(cat /etc/os-release | grep VERSION= | sed -n '1p' | sed 's/VERSION=//' | sed 's/"//g')
# VER_DISTRO=$(lsb_release -c | sed 's/Codename://')
# echo $VER_DISTRO
# Almacena el nombre de la versión de la Distro detectada.

ID_VER_DISTRO=$(cat /etc/os-release | grep VERSION_ID= | sed -n '1p' | sed 's/VERSION_ID=//' | sed 's/"//g')
# ID_VER_DISTRO=$(lsb_release -r | sed 's/Release://')
# echo $ID_VER_DISTRO
# Almacena el ID de la versión de la Distro detectada.

ARQ_DISTRO_COD=$(uname -m)
# echo $ARQ_DISTRO_COD
# Almacenar el Tipo de Arquitectura de la Distro detectada en forma codificada.

ARQ_DISTRO_COD=$(uname -m) ; if [[ "$ARQ_DISTRO_COD" = "x86" ]]; then ARQ_DISTRO_HUM=32; else ARQ_DISTRO_HUM=64; fi
# echo $ARQ_DISTRO_HUM
# Convertir el Tipo de Arquitectura de la Distro detectada en forma codificada a forma humana.

VER_KERNEL=$(uname -r)
# echo $VER_KERNEL
# Almacenar el Nombre del Arquitectura de la Distro detectada.

NOM_HOST=$(cat /etc/hostname)
# echo $NOM_HOST
# Almacenar el Nombre del Host donde se ejecuta el Script.

IP_ETH0=$(ifconfig eth0 | grep inet | grep -v inet6 | cut -d ":" -f 2 | cut -d " " -f 1)
MAC_ETH0=$(ifconfig eth0 | sed -n '1p' | awk '{print $5}')
# IP_INTERNA=$(hostname -I)
# echo $IP_ETH0 $MAC_ETH0
# Almacenar la IP / MAC del Host donde se ejecuta el Script.

echo "Variables de entorno cargadas sin errores, en 5 segundos la aplicación continuará ejecutandose"
sleep 5

###############################################################################
# FINAL DEL MODULO DE VARIABLES DE ENTORNO DEL SCRIPT
###############################################################################

===============

注意: 要件または実装に応じて、コマンドコマンドを追加できます my_variableをエクスポートします 作成された以前の各変数の下、またはコマンドコマンドで直接作成された独自の変数を作成してエクスポートします my_variable = my_parametersをエクスポートします

後で、将来の投稿で私たちはの例を見続けるでしょう モジュール(セクション) 次のような機能を実行します。

  • DOUBLE EXECUTION DETECTIONMODULEまたはFAILEDEXECUTION
  • 最適化モジュール
  • パスワード付きのユーザー認証モジュール
  • 動作システムのアーキテクチャの検出モジュール
  • コーディング言語構成モジュール
  • 実行環境用のプロキシ構成モジュール

他の多くの中で!

彼らはコマンドについて独学することができます: gksu、dialog、gxmessage、zenity、espeak、play、とりわけ ソニックアラートまたはマルチメディアアラートを使用して、ターミナルまたはユーザーのデスクトップ用のグラフィカルインターフェイスを作成する、および後で使用する知識を事前に提供します。

これらおよびその他の推奨事項については、 モジュール、関数、変数、コマンドまたはアクション 一般的にそれは実行することができます たくさんの方法、ここに表示されているのは、 簡単な方法多くの可能性のある方法 その中で アクションを実行できる、または実行できる!

最後に、私はあなたを残します、 私が作ったスクリーンキャスト、これを完了した後、あなたができることをあなたに示すために シェルスクリプトオンラインコース DesdeLinux:

LPI-SB8テストScreenCast

(LINUX POST INSTALL-BICENTENNIAL SCRIPT 8.0.0)-パート2


コメントを残す

あなたのメールアドレスが公開されることはありません。 必須フィールドには付いています *

*

*

  1. データの責任者:MiguelÁngelGatón
  2. データの目的:SPAMの制御、コメント管理。
  3. 正当化:あなたの同意
  4. データの伝達:法的義務がある場合を除き、データが第三者に伝達されることはありません。
  5. データストレージ:Occentus Networks(EU)がホストするデータベース
  6. 権利:いつでも情報を制限、回復、削除できます。

  1.   名無し

    人間の日付:
    echo-e«\ e [1; 32mDate:»$(日付«+%d-%m-%Y»)«\ e [1; 32m時間:»$(日付«+%T»)

    真の「uname-s」:
    cat / proc / sys / kernel / ostype

    ディストリビューション名:
    cat / etc / *リリース| カット-f2-d»| 頭-1

    ホスト名:
    cat / proc / sys / kernel / hostname

    OSアーキテクチャ:
    [[-x / sbin / init]] && file / sbin / init | awk '{print $ 7}' | tr -d '、' || [[-x / lib / systemd / systemd]] &&ファイル/ lib / systemd / systemd | awk '{print $ 7}' | tr -d '、' 2> / dev / null

    カーネルバージョン:
    cat / proc / sys / kernel / osrelease

  2.   Ing。JoseAlbert

    出力が例としてあるので、私はあなたの最初の貢献「人間のための日付」が本当に好きでした:

    日付:11年02月2016日時間:16:04:10

    ダイアログで効果的に、zenityまたはgxmessageウィンドウは非常に視覚的に消化されます!

    あなたのXNUMX番目の提案で私はそれをこのように配置したいと思います:

    trueの場合 "uname -s" && cat / proc / sys / kernel / ostype; 次に、「オペレーティングシステムが検証されました」とエコーします。 fi | 喉の渇き1d

    そして最後に、いつものようにあなたの豊かな貢献に感謝します!