Ravindra Bagale · AWSसर्व coursesया course चे lessonsशोधाEnglish

AWS · मराठी आवृत्ती

4.13 पहिली shell script

रवींद्र बागले यांच्या course वर आधारित · सहज मराठीत explanation

ओळखीचे commands file मध्ये क्रमाने लिहिले की shell script तयार होते. Automation आणि पुढच्या EC2 user data साठी हा पाया. Mauli Dairy server चा छोटा health report करू:

#!/bin/bash
# file: sysinfo.sh  - print a quick health report
set -uo pipefail         # stop on undefined variables and pipe failures

NAME=$(hostname)
echo "Health report for $NAME at $(date)"
echo "---------------------------------"
echo "Uptime : $(uptime -p)"
echo "Disk / : $(df -h / | awk 'NR==2 {print $5 " used"}')"
echo "Memory : $(free -m | awk '/Mem/ {printf "%d/%d MB used", $3, $2}')"

# if-else
if systemctl is-active --quiet nginx; then
  echo "Nginx  : running"
else
  echo "Nginx  : NOT running"
fi

# loop
for svc in sshd crond; do
  echo "$svc -> $(systemctl is-active $svc 2>/dev/null)"
done

# function with argument
check_port() {
  if ss -tln | grep -q ":$1 "; then echo "Port $1 open"; else echo "Port $1 closed"; fi
}
check_port 22
check_port 80

Code मधली नोंद स्पष्ट करूया: set -uo pipefail मध्ये -u unset variables पकडतो आणि pipefail pipeline चा failure status जपतो. तो प्रत्येक failed command वर script आपोआप थांबवतो असा अर्थ नाही; त्यासाठी -e चं वेगळं, काळजीपूर्वक वर्तन समजून घ्यावं लागतं. check_port local listening socket पाहतो; internet firewall access सिद्ध करत नाही.

nano sysinfo.sh        # paste the script, save with Ctrl+O, exit with Ctrl+X
chmod +x sysinfo.sh
./sysinfo.sh
ConceptSyntax
VariableNAME="Asha"; $NAME किंवा ${NAME}; = भोवती spaces नको
Command outputTODAY=$(date +%F)
Arguments$1, $2; सर्व $@; संख्या $#
मागचा exit status$?; 0 म्हणजे success
File आहे का?if [ -f /etc/nginx/nginx.conf ]; then ... fi
Directory test[ -d /var/www ]
संख्या compare[ "$a" -gt 10 ]; -eq -ne -lt -le -ge
String compare[ "$a" = "yes" ]
Inputread -p "Enter name: " NAME

Service names distro नुसार बदला: Ubuntu मध्ये ssh/cron आणि इतरत्र sshd/crond असू शकतात.

Lab

sysinfo.sh run करा. check_port 443 आणि check_port 3306 जोडा. मग backup.sh लिहा जो ~/backups/web-$(date +%F).tar.gz तयार करेल. ./backup.sh नंतर ls ~/backups तपासा.