POSIX шел

, UNIX-д хэрэглэгддэг шел.]]

POSIX шел нь POSIX стандартын нэг хэсэг бөгөөд энэхүү системийн команд мөрийн шелийг тодохойлж өгсөн байдаг. Энэ нь хэрэглэгчийг үйлдлийн системтэй холбож өгдөг хэрэглэгчийн интерфэйс програм юм. Өөрөөр хэлвэл хэрэглэгч команд мөрийн горимд компьютерийн гар дээр удирдамж бичиж оруулах замаар ажиллах юм. Үүнээс гадна хэрэглэгч үйлдлүүдээ файлд хадгалан скрипт үүсгэж, түүнийгээ команд мөрийн шелээр ажиллуулах боломжтой. Энэ нь ажлыг автоматжуулах үндсэн арга болдог.

Өнөөгийн гол үйлдлийн системүүд (Microsoft Windows-с бусад) POSIX стандартыг дэмжсэн шелийг үндсэн шелээр ашигладаг. Үндсэн шел нь `/bin/sh` -д холбоотой байгаа шелийг хэлнэ. Хэрэглэгч POSIX шелийг ашиглах болон үүнд зориулсан скрипт бичсэнээр өргөн хүрээний системүүд дээр ажиллах боломжтой болох юм.

Windows дээр POSIX стандартыг дэмжсэн шел анхнаасаа суугаагүй байдаг бөгөөд хэрэглэгч үүнийг нэмэлт байдлаар суулган ашиглах боломжтой.

## POSIX шелийн ажиллагаа 
Командын мөрийн шел нь итерактив команын хэл болон скриптийн програмын хэл болдог. Хэрэглэгч командын мөрийн горимд ажиллах явцад шелийн өөрийн болон системийн бусад командуудыг дураараа хольж ашигладаг.

Шел анх ачааллах үед зарим файлуудыг (`/etc/profile`, `~/.profile`) тодорхой нөхцөлтэйгээр автоматаар ажиллуулдаг. Ингснээрээ хэрэглэгчийн орчинг үндсэн ажиллагаа эхлэхээс өмнө тохируулах боломж олгодог.

### Онцгой утгатай тэмдэгтүүд 
Хойшоо налуу зураас `\`, дан хашилт `'` болон давхар хашилт `"` -ыг ашиглан онцгой утгатай тэмдэгтүүдийг тусгаарлан оруулж өгдөг. Үүнд:

 |  &  ;    (  )  $  `  \  "  '      

Жишээ нь: `cd 'foo bar'`, `cd "foo bar"` болон `cd foo\ bar` гэсэн командууд нь ижил утгатай бөгөөд `foo bar` гэсэн хавтасруу шилжэн орохыг заана.

Гэхдээ давхар хашилт дотор `$`, ``` болон `\` тэмдэгтүүд нь огцгой утгатай хэвээр байх юм.

### Параметр болон хувьсагчууд 
Байршлын параметр нь шелийг эсвэл функц дуудаж ажиллуулах үед зааж өгсөн аргументууд болно. Үүнийг ашиглахдаа харгалзах дугаараар нь хандна. Эдгээрийг `set` командаар өөрчлөх боломжтой.

Хувьсагч нь нэрээр хандаж ашиглах параметр юм. шел ачааллаж эхлэхдээ орчны хувьсагчуудыг эдгээр шелийн хувьсагч болгодог. Хувьсагчийг тодорхойлох эсвэл өөрчлөхдөө `name=value` гэж зааж өгнө.

Онцгой параметрыг тусгай тэмдэгтээр хандах бөгөөд, жишээлвэл, `?` тэмдэгтээр хамгийн сүүлийн командын гаралтын төлвийг заана.

### Үгийн тэлэлт 
Үгийн эхэнд бичигдсэн, хашилтан дотор бус долгион тэмдэг `~` нь хэрэглэгчийн гэр хавтсыг илэрхийлнэ. Жишээ нь: `~/foobar` – хэрэглэгчийн гэр хавтсанд байрлах `foobar` файлыг заана, `~user/foobar` – `user` гэсэн хэрэглэгчийн гэр хавтсанд байрлах `foobar` файлыг заана.

Параметр тэлэлт нь `${param}` болон `$param` гэсэн хэлбэртэй байх бөгөөд тухайн параметр болон хувьсагчийг заана. Энэ тэлэлт нь мөн давхар хашилтанд байрлаж болно.

Команд солих нь `$(command)` болон ``command`` хэлбэртэй байх бөгөөд тухайн командын гаралтыг энэ хэсэгч орлуулж ашиглахыг заана.

Арифметик тэлэлт нь `$((expression))` хэлбэрээр тоон бодолтын үр дүнг энэ хэсэгт орлуулж ашиглахыг заана.

Файл нэрийн тэлэлт нь хэв бүхий үгийг системийн харгалзах файлын нэрүүдээр солих ажиллагаа юм. Жишээ нь: `ls *.odt` коммандаар ажжиллаж буй хавтас дотор байх бүх `odt` файлуудыг `ls` командад дамжуулна.

### Шелийн хэв 
Одтой тэмдэг (`*`) ямарч тексттэй таарах ба асуултын тэмдэг (`?`) ямар нэг үсэг болон тэмдэгтийг илэрхийлнэ. Дөрвөлжин хаалтаар тэмдэгтийн ангийг (`[abc]`) үүсгэх энэ нь анхаалын тэмдэгтээр эхэлсэн тохиолдолд (`[!abc]`) харгалзах тэмдэгтийн ангийг урвуугаар илэрхийлнэ.

### Оролт гаралтыг өөрчлөх 
Аливаа командыг ажиллуулахдаа оролт, гаралтын урсгалыг өөрчилж зааж өгч болно. Үүнд: `command > file` гэсэн хэлбэрээр командын стандарт гаралтын урсгалыг заасан файлруу чиглүүлнэ. command  гэсэн хэлбэрээр командын стандарт оролтын урсгалыг заасан файлаас уншина. `command 2> file` гэсэн хэлбэрээр командын стандарт алдааны урсгалыг заасан файлруу чиглүүлнэ.

### Командын хайлт 
Шел аливаа командыг ажиллуулахын өмнө тухайн команд хаана байгааг олох шаардлагатай байдаг. Энэ хайлт нь дараах дарааллын дагуу явагдана:

# Хэрэв командын нэр ташуу зураас (`/`) агуулсан бол тухайн командыг шууд хайлт хийлгүй ажиллуулна.
# Шелийн функц тухайн нэрээр олдвол ажиллуулна.
# Дараачийн ээлжинд шелийн өөрийн командыг авч үзнэ.
# Эцэст нь тухайн командыг `PATH` орчны хувьсагчид зааж өгсөн хавтаснуудаас хайж ажиллуулна.

Шелийн функц, өөрийн команд болон системийн командыг дуудаж ажиллуулах хэлбэр нь яг адилхан байдаг учир эдгээр төрлийн командуудыг харилцан солих боломжтой байдаг. Өөрөөр хэлбэл байнга хэрэглэгдэх системийн командыг ижил нэртэй функцээр орлуулснаар гүйцэтгэлийг сайжруулж болно.

### Дамжуулах хоолой 
Оролт гаралтыг өөрчилж болдогтой төстэй бас нэгэн ажиллагаа нь дамжуулах хоолой юм. Энэ аргачлалаар нэг командын гаралтыг нөгөө командын оролтруу шууд холбож өгч болно. Хэлбэр нь `command1 | command2` байх бөгөөд энэ нь эхний командын гаралтыг дараачийн командын оролттой холбоно гэсэн үг.

### Удирдлагын бүтэц 
`if` команд нь дараах хэлбэртэй байх бөгөөд `command` -н төгсгөлийн төлөв тэг байх нөхцөлд `commands` командуудыг ажиллуулах бөгөөд эс боловоос `else` хэсгийн командуудыг ажиллуулах юм.

 

`while` команд нь дараах хэлбэртэй байх бөгөөд `command` -н төгсгөлийн төлөв тэг байх болгонд командуудыг давтан ажиллуулах юм.

 

`for` команд нь дараах хэлбэртэй байх бөгөөд бүх `word ...` утгуудын хувьд тус бүр `var` хувьсагчид оноож командуудыг давтан ажиллуулах юм.

 

### Шелийн функц тодорхойлох 
Функц тодорхойлохдоо дараах хэлбэрийг ашиглана. Үүнд `name` гэсэн функц нь их биедээ хэдэн ч командуудыг агуулж болох ба `return` -р функцийг төгсгөж болох бөгөөд төлөвийг мөн зааж өгч болно.

 

## Шелийн өөрийн командууд 
Шелийн зарим командуудыг дурьдя:

`bg` – Зогсоосон байгаа арын ажлыг үргэлжлүүлэх.

`cd` – Ажлын хавтсыг өөрчлөх.

`echo` – Дэлгэцэнд текст бичих.

`exit` – Шелээс гарах.

`pwd` – Ажлын хавтсыг харуулах.

`read` – Хэрэглэгчээс текст мэдээлэл авах.

`wait` – Арын ажлыг дуусахыг хүлээх.

## Системийн командууд 
POSIX стандартад мөн бусад системийн командуудыг зааж өгсөн байдаг. Түүнээс гадна системийн командууд нь шелийн нэгдсэн хэсэг биш болохыг анхаарах хэрэгтэй. Үүнээс зарим нэгийг дурдвал:

`cat` – заасан файлуудыг нэгтгэн харуулах.

`chmod` – файл болон хавтасны эрхийг өөрчлөх.

`cp` – заасан файл болон хавтсыг хуулах.

`find` – системээс файл болон хавтсуудыг хайх.

`mkdir` – шинэ хавтас үүсгэх.

`mv` – заасан файл болон хавтсыг нүүлгэх буюу нэрийг өөрчлөх.

`rm` – заасан файл болон хавтсыг устгах.

## Лавлах холбоос 
Ангилал: Үйлдлийн систем