AWS · मराठी आवृत्ती
4.13 पहिली shell script
ओळखीचे 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
| Concept | Syntax |
|---|---|
| Variable | NAME="Asha"; $NAME किंवा ${NAME}; = भोवती spaces नको |
| Command output | TODAY=$(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" ] |
| Input | read -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 तपासा.