در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement

سلام و وقت بخیر. هنگامی که قرار است برای یک ورودی مقادیر مختلفی چک شود و به ازای هر مقدار آن تصمیم خاصی گرفته شود، از case استفاده میکنیم. case یک if توسعه یافته است. منطق case در زبان های برنامه نویسی مختلف یکسان است. به ساختار زیر دقت کنید.

آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement

یک مثال نسبتا ساده را از case در bash بررسی میکنیم. به کد زیر دقت کنید.

#!/bin/bash

if [[ ! -d $1 ]]
then
	echo "Usage: $0 <directory>"
	exit 1
fi

case $2 in 
	"directory")
			find $1 -maxdepth 1 -type d
			;;
	"link")
			find $1 -maxdepth 1 -type l
			;;
	*)
			echo "Usage: $0 <directory> directory | link "
			;;
esac

exit 0

صورت مساله این است که برنامه ای بنویسید که یک مسیر بگیرد، سپس بر اساس اعلام کاربر به دنبال پوشه ها و یا لینک ها در این مسیر تا عمق یکی باشد.

اول از همه با دستور if بررسی میکند که آیا آرگومان اول ارسالی یک مسیر هست یا نه. علامت ! ینی نقیض. پس خط اول میشه اگه آرگومان اول یک directory نیست یک پیام چاپ کن و با کد خطا از برنامه خارج شو. اگر آرگومان اول یک مسیر باشد، شرط برقرار نمیشود و وارد بدنه دستور if نمیشود و برنامه ادامه میابد. بعد از آن از ساختار case برای تشخیص آرگومان ارسالی دوم استفاده کردیم. این case تصمیم میگیرد که با توجه به مقدار آرگومان دوم، چه دستوراتی اجرا شود. در حالت اول اگر مقدار آرگومان دوم directory باشد قطعه کئ زیر آن اجرا میشود. در حالت دوم هم اگر مقدار آرگومان دوم link باشد قطعه کد زیر آن اجرا میشود. مورد آخر که با ستاره مشخص شده یعنی حالت پیش فرض است اگر هیچ یک از سرایط بالا برقرار نباشد، قطعه کد درون ستاره اجرا میشود.

خروجی بصورت زیر است، حالت هایی که خطا میدهد را هم امتحان کردیم.

[mohammad@CentOS6 ~]$ case.sh
Usage: /home/mohammad/bin/case.sh <directory>
[mohammad@CentOS6 ~]$ case.sh /etc
Usage: /home/mohammad/bin/case.sh <directory> directory | link 
[mohammad@CentOS6 ~]$ case.sh /etc link
/etc/grub.conf
/etc/rc1.d
/etc/redhat-release
/etc/favicon.png
/etc/rc6.d
/etc/rc2.d
/etc/init.d
/etc/rc.local
/etc/rc4.d
/etc/rc5.d
/etc/rc
/etc/rc3.d
/etc/system-release
/etc/rc0.d
/etc/rc.sysinit
[mohammad@CentOS6 ~]$ case.sh /etc directory
/etc
/etc/rpm
/etc/iproute2
/etc/iscsi
/etc/xml
/etc/sound
/etc/profile.d
/etc/festival
/etc/ssh
/etc/ld.so.conf.d
/etc/setuptool.d
/etc/reader.conf.d
/etc/request-key.d
/etc/cups
/etc/rsyslog.d
/etc/chkconfig.d
/etc/alternatives
/etc/event.d
/etc/spice
/etc/cron.weekly
/etc/libvirt
/etc/popt.d
/etc/skel
/etc/bluetooth
/etc/pcmcia
/etc/logrotate.d
/etc/NetworkManager
/etc/ntp
/etc/pulse
/etc/cron.monthly
/etc/dhcp
/etc/samba
/etc/default
/etc/gnupg
/etc/rpmdevtools
/etc/selinux
/etc/PackageKit
/etc/vmware-tools
/etc/makedev.d
/etc/named
/etc/fcoe
/etc/sasl2
/etc/sudoers.d
/etc/udev
/etc/security
/etc/prelink.conf.d
/etc/bash_completion.d
/etc/ssl
/etc/modprobe.d
/etc/hal
/etc/sysconfig
/etc/blkid
/etc/X11
/etc/acpi
/etc/rwtab.d
/etc/opt
/etc/pm
/etc/xdg
/etc/pam.d
/etc/libreport
/etc/gtk-2.0
/etc/sgml
/etc/yum
/etc/init
/etc/postfix
/etc/statetab.d
/etc/ghostscript
/etc/gnome-vfs-2.0
/etc/ConsoleKit
/etc/dnsmasq.d
/etc/foomatic
/etc/plymouth
/etc/scl
/etc/gcrypt
/etc/rc.d
/etc/dracut.conf.d
/etc/yum.repos.d
/etc/httpd
/etc/pango
/etc/audit
/etc/dbus-1
/etc/portreserve
/etc/pki
/etc/polkit-1
/etc/gdm
/etc/xinetd.d
/etc/cron.d
/etc/cron.daily
/etc/avahi
/etc/audisp
/etc/terminfo
/etc/bonobo-activation
/etc/gconf
/etc/cron.hourly
/etc/obex-data-server
/etc/fonts
/etc/vmware-caf
/etc/lvm
/etc/depmod.d
/etc/wpa_supplicant
/etc/ppp
/etc/kdump-adv-conf
/etc/openldap
/etc/alsa
/etc/lsb-release.d
/etc/multipath
[mohammad@CentOS6 ~]$ 

بسیار خوب. این یک مثال برای درک مطلب بود. سعی کنید کمی خلاقیت به خرج بدین و مثال بسازید. مثلا case رو با دستور read ترکیب کنید که case بر اساس متغیر هایی که بوسیله دستور read از کاربر گرفته میشود، تصمیم گیری کند.

پایان قسمت چهارم از بخش دوم

نویسنده : سید محمد باقر موسوی

منبع : جزیره لینوکس و سیستم های متن باز وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#دوره_آموزشی_linux_فارسی #نوشتن_shell_script_در_لینوکس #آموزش_لینوکس_فارسی #آموزش_linux_مقدماتی #آموزش_shell_scripting #آموزش_دستورات_مقدماتی_لینوکس #آموزش_shell_scripting_در_لینوکس #دوره_آموزشی_shell_scripting_در_لینوکس #نوشتن_یک_shell_script_ساده
عنوان
1 آموزش لینوکس : مدیریت سیستم : قسمت 1 : Shell سفارشی : متغیرها رایگان
2 آموزش لینوکس : مدیریت سیستم قسمت 2 : Shell سفارشی : تنظیمات Shell رایگان
3 آموزش لینوکس : مدیریت سیستم : قسمت 3 : Shell سفارشی : Aliases رایگان
4 آموزش لینوکس : مدیریت سیستم : قسمت 4: Shell سفارشی: Login Scripts رایگان
5 آموزش لینوکس : مدیریت سیستم : قسمت 5 : ایجاد اسکریپت رایگان
6 آموزش لینوکس : مدیریت سیستم : قسمت 5 : Read User Input رایگان
7 آموزش لینوکس : مدیریت سیستم : قسمت 6 : IF Statement رایگان
8 آموزش لینوکس : مدیریت سیستم : قسمت 7 : Case Statement رایگان
9 آموزش لینوکس : مدیریت سیستم : قسمت 8 : Loops رایگان
10 آموزش لینوکس : مدیریت سیستم : قسمت 9 : Managing Users رایگان
11 آموزش لینوکس : مدیریت سیستم : قسمت 10 : Managing Groups رایگان
12 آموزش لینوکس : مدیریت سیستم : قسمت 11 : ارتباط با اکتیودایرکتوری رایگان
13 آموزش لینوکس : مدیریت سیستم : قسمت 12 : OpenLDAP رایگان
14 آموزش لینوکس : مدیریت سیستم : قسمت 13 : Cron AnaCron و Batch رایگان
15 آموزش لینوکس : مدیریت سیستم : قسمت 14 : آشنایی با IPTables رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....