درآمدی بر Environment Variables در لینوکس

درآمدی بر Environment Variables در لینوکس

تقریباً می‌شود گفت که تمامی اسکریپت‌ها از Variable (متغیر) که حاوی یک Value (مقدار) باشد استفاده می‌کنند که کاربرد متغیرها بدین شکل است که در هر کجای دیگر اسکریپت می‌توانید مقادیر آن‌ها را مورد استفاده قرار دهید. لازم به‌ذکر است که متغیرها هم توسط کاربر و هم توسط سیستم قابل تعریف شدن هستند و این درحالی است که بسیاری اپلیکیشن‌ها از این متغیرها برای تسک‌های مختلفی من‌جمله کنترل رفتار سیستم استفاده می‌کنند.

به‌عنوان برخی از نمونه Environment Variable (متغیرهای محیطی) می‌توان به HOME ،PATH و HOST اشاره کرد؛ به‌خاطر داشته باشیم وقتی که این متغیرهای محیطی را می‌خواهیم استفاده کنیم، حتماً یک علامت $ -مثل HOME$- باید قبل از آن‌ها قرار دهیم. برای این‌ هم که بتوانیم مقادیر ذخیره در این متغیرها را نمایش دهیم، می‌توانیم به‌صورت زیر عمل کنیم:

$ echo $PATH

درعین‌حال برای مقداردهی و آپدیت مقادیر این نوع متغیرها نیازی به هیچ‌گونه پیشوندی -مثلاً علامت $- نیست؛ به‌طور مثال،‌ برای ایجاد یک متغیر تحت‌عنوان MYCOLOR و اختصاص رنگ آبی به آن، به‌صورت زیر عمل می‌کنیم:

$ MYCOLOR=blue
نکته برای دستیابی به لیستی از متغیرهای محیطی، می‌توان از کامندهای env و printenv استفاده کرد. به خاطر داشته باشید همان‌طور که در کامند فوق مشاهده می‌شود، مابین MYCOLOR و علامت = و blue هیچ فاصله‌ای وجود ندارد و درصورتی‌که به اشتباه فاصله‌ای مابین آن‌ها قرار گیرد سیستم ارور خواهد داد.

خروجی گرفتن از متغیرها
به‌صورت پیش‌فرض، متغیرهایی که داخل یک اسکریپت ساخته‌ می‌شوند صرفاً در همان اسکریپت در دسترس می‌باشند که کلیهٔ فرایندهای جانبی که تحت‌عنوان Sub-Shell شناخته می‌شوند به چنین متغیرهایی دسترسی ندارند. برای آن که بتوانیم از طریق اسکریپت‌های زیرشاخه به این متغیرهای دسترسی داشته باشیم، متغیرهای ایجاد شده می‌بایست بااستفاده از دستور export به Environment Variableها ارتقأ یابند؛ در همین راستا داریم:

export VAR=value

توجه داشته باشیم که متغیرهای اکسپورت شده به اشتراک گذاشته نمی‌شوند بلکه صرفاً کپی می‌شوند و به همین دلیل هم هست که اگر تغییری در مقادیر متغیرها توسط اسکریپت‌های زیرشاخه صورت گیرد، این تغییرات توسط اسکریپت اصلی مشاهده نخواهند شد. برای روشن‌تر شدن این مسئله، مثالی می‌زنیم:

$ SITE=SokanAcademy

در این مرحله توانسته‌ایم متغیری تحت‌عنوان SITE ایجاد کنیم؛ حال اقدام به استفاده از دستوری تحت‌عنوان export می‌کنیم:

$ export SITE

اکنون دستور export را وارد کرده و اینتر می‌کنیم:

$ export
declare -x CLUTTER_IM_MODULE="xim"
declare -x COLORTERM="truecolor"
declare -x COMPIZ_BIN_PATH="/usr/bin/"
declare -x COMPIZ_CONFIG_PROFILE="ubuntu"
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DEFAULTS_PATH="/usr/share/gconf/ubuntu.default.path"
declare -x DESKTOP_SESSION="ubuntu"
declare -x DISPLAY=":0"
declare -x GDMSESSION="ubuntu"
declare -x GDM_LANG="en_US"
declare -x GNOME_DESKTOP_SESSION_ID="this-is-deprecated"
declare -x GPG_AGENT_INFO="/home/behzadmoradi/.gnupg/S.gpg-agent:0:1:"
declare -x GTK2_MODULES="overlay-scrollbar"
declare -x GTK_IM_MODULE="ibus"
declare -x GTK_MODULES="gail:atk-bridge:unity-gtk-module"
declare -x HOME="/home/behzadmoradi"
declare -x IM_CONFIG_PHASE="1"
declare -x INVOCATION_ID="65e29f40117b49be9b3ede47861fc368"
declare -x JAVA_HOME="/usr/local/java/jre1.8.0_131"
declare -x JOURNAL_STREAM="8:26291"
declare -x LANG="en_US.UTF-8"
declare -x LANGUAGE="en_US"
declare -x LC_ADDRESS="fa_IR"
declare -x LC_IDENTIFICATION="fa_IR"
declare -x LC_MEASUREMENT="fa_IR"
declare -x LC_MONETARY="fa_IR"
declare -x LC_NAME="fa_IR"
declare -x LC_NUMERIC="fa_IR"
declare -x LC_PAPER="fa_IR"
declare -x LC_TELEPHONE="fa_IR"
declare -x LC_TIME="fa_IR"
declare -x LESSCLOSE="/usr/bin/lesspipe %s %s"
declare -x LESSOPEN="| /usr/bin/lesspipe %s"
declare -x LOGNAME="behzadmoradi"
declare -x LS_COLORS="rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:"
declare -x MANAGERPID="1184"
declare -x MANDATORY_PATH="/usr/share/gconf/ubuntu.mandatory.path"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/behzadmoradi/bin:/usr/local/java/jre1.8.0_131/bin"
declare -x PWD="/home/behzadmoradi/Desktop"
declare -x QT4_IM_MODULE="xim"
declare -x QT_ACCESSIBILITY="1"
declare -x QT_IM_MODULE="ibus"
declare -x QT_LINUX_ACCESSIBILITY_ALWAYS_ON="1"
declare -x QT_QPA_PLATFORMTHEME="appmenu-qt5"
declare -x SHELL="/bin/bash"
declare -x SHLVL="2"
declare -x SITE="SokanAcademy"
declare -x SSH_AGENT_LAUNCHER="gnome-keyring"
declare -x SSH_AUTH_SOCK="/run/user/1000/keyring/ssh"
declare -x TERM="xterm-256color"
declare -x USER="behzadmoradi"
declare -x VTE_VERSION="4402"
declare -x WINDOWID="83886086"
declare -x XAUTHORITY="/home/behzadmoradi/.Xauthority"
declare -x XDG_CONFIG_DIRS="/etc/xdg/xdg-ubuntu:/etc/xdg"
declare -x XDG_CURRENT_DESKTOP="Unity:Unity7"
declare -x XDG_DATA_DIRS="/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop"
declare -x XDG_GREETER_DATA_DIR="/var/lib/lightdm-data/behzadmoradi"
declare -x XDG_RUNTIME_DIR="/run/user/1000"
declare -x XDG_SEAT_PATH="/org/freedesktop/DisplayManager/Seat0"
declare -x XDG_SESSION_DESKTOP="ubuntu"
declare -x XDG_SESSION_PATH="/org/freedesktop/DisplayManager/Session0"
declare -x XDG_SESSION_TYPE="x11"
declare -x XMODIFIERS="@im=ibus"

همان‌طور که می‌بینیم، در خط 49 متغیر محیطی ما تحت‌عنوان SITE اضافه شده است.

11-1
درآمدی بر اسکریپت‌نویسی در محیط لینوکس
بهزاد مرادی
۱۳۹۶/۰۵/۰۸
11-2
معرفی اسکرپیت‌نویسی در محیط Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۸
11-3
شروع اسکریپت‌نویسی با Bash
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-4
آشنایی با نحوهٔ Return کردن مقادیر در Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-5
لیست کاراکترهای خاص برای اکسریپت‌نویسی در Bash
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-6
آشنایی با مفهوم Redirection ورودی‌ها و خروجی‌ها در اسکرپیت‌نویسی Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-7
کامندهای از پیش تعریف شدهٔ Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-8
آشنایی با پارامترهای اسکریپتی
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-9
جایگزینی کامندها در اسکریپت‌نویسی Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-10
درآمدی بر Environment Variables در لینوکس
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-11
آشنایی با مفهوم فانکشن در اسکریپت‌نویسی Shell
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-12
آشنایی با نحوهٔ استفاده از دستورات شرطی در اسکریپت‌نویسی
بهزاد مرادی
۱۳۹۶/۰۵/۰۹
11-13
درآمد بر اکسپرشن‌های ریاضیاتی در اسکریپت‌نویسی Shell در لینوکس
بهزاد مرادی
۱۳۹۶/۰۵/۱۰
11-14
کار با String در اسکریپت‌نویسی لینوکس
بهزاد مرادی
۱۳۹۶/۰۶/۱۶
11-15
نحوهٔ استفاده از دستور case در اسکریپت‌نویسی شل
بهزاد مرادی
۱۳۹۶/۰۶/۱۸
11-16
آشنایی با نحوهٔ به‌کارگیری از Loop در اسکریپت‌نویسی بش
بهزاد مرادی
۱۳۹۶/۰۶/۱۹
11-17
آشنایی با فرایند دیباگینگ اسکریپت‌های شل
بهزاد مرادی
۱۳۹۶/۰۶/۲۰
rocket
نظرات
اگر login نکردی برامون ایمیلت رو بنویس: