боюнча 1 бөлүк Бул сериянын ичинен биз төмөнкүлөрдү ишке ашырууну унутпайлы:
Ал эми мурункуларында биз өзүбүздү чылап алдык мыкты тажрыйбалар сонун түзүүдө ээрчиш керек Linux үчүн Баштагы Shell сценарийи, жана өзгөчө долбоорлоо жагынан а Shebang жана BSM (Баш катуу режими / катуу режим).
көрсөткүч
GNU / Linux тутумунда Shell скриптин түзүү боюнча мыкты тажрыйбалар - 1-бөлүк
GNU / Linux тутумунда Shell скриптин түзүү боюнча мыкты тажрыйбалар - 2-бөлүк
Бул билдирүүдө биз кантип ишке ашырууну көрөбүз Linux үчүн Bash'тагы Shell скрипти үчүн чөйрөнүн өзгөрүлмө модулу, мисал катары менин бирөө программалар (тиркемелер) а фактылар Shell script деп аталат Linux Post Орнотуусу - Bicentennial Script 8.0, бирок адегенде кыскача кыскача маалымат мыкты тажрыйбалар ошондуктан аларды эсиңде тутушуң керек:
- Кодуңузду көрсөтүңүз,
- Коддун бөлүктөрүнүн арасына боштуктарды кошуңуз,
- Код боюнча мүмкүн болушунча көп комментарий калтырыңыз,
- Функцияларынын сүрөттөмө аталыштары менен өзгөрмө түзүү,
- Буйрукту алмаштыруу үчүн VARIABLE = $ (буйрук) синтаксисин колдонуңуз
- Төмөнкүлөрүнүн модулдарын жана / же өзгөрүлмөлөрүн колдонуңуз: Супер колдонуучу жана Колдонуучунун Авторлоштурулган текшерүүсү белгиленген сырсөздөр менен же жок.
- Төмөнкү модулдарды жана / же өзгөрмөлөрдү колдонуңуз: Операциялык тутумдун текшерилиши (Distro, Version, Architecture жана башкалар),
- Модулдарды (жол-жоболорду / бөлүмдөрдү) критикалык же топтомдуу иш-аракеттердин (иш-аракеттердин / функциялардын) аткарылышын тастыктоо үчүн колдонуңуз,
- Колдонуучуга ыңгайлуу интерфейстерди камсыз кылыңыз (Колдонуучуга ылайыктуу): Терминал боюнча (Диалогду колдонгон менюлар жана түстөр менен) жана / же Иш такта аркылуу (Zenity жана Gxmessage колдонгон Windows менен),
- Колдонуучуга саламдашуу жана коштошуу (билдирүүлөр) модулдарын кошуңуз, керек болсо,
- Эки жолу текшерүү модулун кошуңуз,
- Тышкы Функциялар жана / же Модулдар менен сценарийдин көлөмүн рационалдаштыруу,
- Башка котормочуларга так жана даана чалууларды,
- Зарыл деп эсептеген башка логикалык жана сарамжалдуу сунуштарды колдонуңуз.
Бул жерде а Linux үчүн Bash'тагы Shell скрипти үчүн чөйрөнүн өзгөрүлмө модулу. Бул бардык белгилүү же ыктымал өзгөрүлмөлөрдү камтыган модуль (бөлүм) болушу керек Shell script анын аткарылышына муктаж же керек болот. Мен төмөнкүлөрдү кошумчалайм:
###############################################################################
# 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 экспорттоо
Кийинчерээк, кийинки билдирүүлөрдө биз анын мисалын көрө беребиз модулдар (бөлүмдөр) сыяктуу функцияларды аткарган:
- КОШ ЭЛДИК АЖЫРАТУУ МОДУЛУ ЖАНА АРАКЕТСИЗ АТКАРУУ
- ОПТИМИЗАЦИЯЛОО МОДУЛУ
- КОЛДОНУУЧУ БИЗДИ АВТОРИЗАЦИЯЛОО МОДУЛУ СЫР СӨЗ МЕНЕН
- ОПЕРАЦИЯЛЫК ТУТУМДУН архитектурасын аныктоонун МОДУЛУ
- ТИЛДИ КОНФИГУРАЦИЯЛОО МОДУЛУН КОДДОО
- АТКАРУУ АЙЛАНАСЫ ҮЧҮН ПРОКСИ КОНФИГУРАЦИЯСЫНЫН МОДУЛУ
Башкалардын арасында!
Алар буйруктар жөнүндө өз алдынча үйрөнө алышат: gksu, диалог, gxmessage, кызуу кандуулук, сүйлөшүү, ойноо, көптөгөн башкалар арасында Графикалык интерфейстерди Терминал аркылуу же Колдонуучунун Иш тактасына, sonic же multimedia эскертүүлөрү менен түзүү, жана кийинчерээк колдонула турган билимдерин өркүндөтүү.
Ушул жана башка сунуштар бар экендигин унутпаңыз модуль, функция, өзгөрүлмө, буйрук же аракет жалпысынан ал ишке ашырылышы мүмкүн көп жолдор, жана бул жерде көрсөтүлгөн нерсе бирөө гана жөнөкөй жол, ныкы көптөгөн мүмкүн жана ыктымалдуу жолдор анда айтылган иш-аракет жүзөгө ашырылышы мүмкүн же болушу мүмкүн!
Аягына чейин мен сени таштап кетем, а Мен жасаган скринкаст, муну бүткөндөн кийин, сиз эмнеге жөндөмдүү экениңизди көрсөтүү үчүн Shell Scripting онлайн курсу DesdeLinux:
(LINUX POST ОРНОТУУ - BICENTENNIAL SCRIPT 8.0.0) - 2-бөлүк
2 комментарий, өзүңүздүкүн калтырыңыз
Адамдар үчүн дата:
echo -e «\ e [1; 32mDate:» $ (дата «+% d-% m-% Y») «\ e [1; 32m Убакыт:» $ (дата «+% T»)
Чыныгы "uname -s":
cat / proc / sys / kernel / ostype
Жайгашкан аты:
cat / etc / * release | кесүү -f2 -d »| баш -1
Хосттун аты:
cat / proc / sys / kernel / hostname
OS архитектурасы:
[[-x / sbin / init]] && file / sbin / init | awk '{print $ 7}' | tr -d ',' || [[-x / lib / systemd / systemd]] && file / lib / systemd / systemd | awk '{print $ 7}' | tr -d ',' 2> / dev / null
Ядро версиясы:
cat / proc / sys / kernel / osrelease
"Адамдар үчүн дата" деген биринчи салымыңыз мага абдан жакты, анткени жыйынтыгы мисал боло алат:
Дата: 11 Убакыт: 02:2016:16
Кандай диалог, zenity же gxmessage терезесинде визуалдык жактан сиңимдүү болот!
Экинчи сунушуңуз менен мен аны мындай жайгаштыргым келет:
эгер чыныгы "uname -s" && cat / proc / sys / kernel / ostype; анда "Иштетүү тутуму текшерилген" деген жаңырык; fi | суусоо 1d
Акыры, ар дайымкыдай байытуучу салымдарыңыз үчүн чоң рахмат!