$ SHLVL փոփոխականն օգտագործվում է ձեզ պատմելու համար, թե որքան խորաթափանցիկ եք դուք: Եթե դուք շփոթված եք դրա համար, արժե սկսել սկզբից:
Ինչ է սա:
A shell- ն ընդունում է հրամանները եւ տալիս նրանց հիմքում ընկած օպերացիոն համակարգը: Linux համակարգերի մեծ մասում shell ծրագիրը կոչվում է BASH (The Bourne Again Shell), բայց կան նաեւ ուրիշներ, ներառյալ C Shell (tcsh) եւ KORN shell (ksh):
Ինչպես օգտվել Linux Shell- ին
Ընդհանրապես, որպես օգտագործող, դուք հաղորդակցվում եք շերտերի ծրագրով `XTerm, konsole կամ gnome-terminal- ի օգտագործման միջոցով:
Եթե դուք աշխատում եք պատուհանների կառավարիչ, ինչպիսիք են Openbox- ը կամ Desktop- ի միջավայրը, ինչպիսիք են GNOME կամ KDE- ը, դուք կգտնեք տերմինալի էմուլատոր կամ մենյուից կամ տողից: Շատ համակարգերում CTRL ALT եւ T դյուրանցումները կբացվեն նաեւ տերմինալային պատուհան:
Alternatively, դուք կարող եք անցնել մեկ այլ tty (teletypewriter), որն ապահովում է անմիջական հասանելիություն հրամանի տող շեղում: Դուք կարող եք դա անել, սեղմելով CTRL ALT եւ F1 կամ CTRL ALT եւ F2 եւ այլն:
Ինչ է նշանակում Shell մակարդակը
Երբ դուք հրաման եք վարում վահանակում, այն աշխատում է շերտերի մակարդակի կոչվող մի բանով: Շաբլոնի ներսում դուք կարող եք բացել մեկ այլ վահանակ, որը դարձնում է այն ենթահեղձ կամ շերտ, որը բացեց այն:
Հետեւաբար ծնողի միջադիրը համարվում էր հավանական մակարդակի 1 միջադիր, եւ երեխայի շերտը կլինի 2 մակարդակ:
Ինչպես ցուցադրել Shell մակարդակը
Այն պետք է լինի ոչ մի անակնկալ, որը հիմնված է հոդվածի վերնագրի վրա, որ դուք կարող եք ասել, թե որն է Ձեր վահանակի մակարդակը, որն օգտագործվում է $ SHLVL փոփոխականով:
Տեսնելու համար, որ դուք ներկայումս վարում եք սավանի մակարդակը, հետեւյալը.
echo $ SHLVL
Ավելի շուտ հետաքրքիր է, եթե դուք գործարկեք վերը նշված հրամանը տերմինալային պատուհանի մեջ, դուք կարող եք զարմանալ, որ արդյունքը վերադարձավ 2:
Այնուհանդերձ, եթե դուք միեւնույն հրամանը վարում եք tty- ով, ապա արդյունքը 1 է:
Ինչու է այդպես վարվել: Դե, դուք աշխատում եք աշխատասեղանի միջավայրը, որը վազում է վահանակի վերեւում: Այդ շերտը կլինի մակարդակ 1: Այդ սեղանադիր միջավայրում բացվող ցանկացած տերմինալային պատուհանը պետք է լինի սաղավարտի երեխա, որը բացեց աշխատասեղանի միջավայրը եւ, հետեւաբար, սաղավարտի մակարդակը չի կարող սկսվել ոչ այլ թվից:
The tty- ն չի աշխատում աշխատասեղանի միջավայրի եւ, հետեւաբար, պարզապես մակարդակի 1 shell է:
Ինչպես ստեղծել Subshells
Ռումբերն ու ենթախմբերը հասկանալու ամենահեշտ ձեւը հետեւյալն է. Բացել տերմինալային պատուհանը եւ մուտքագրել հետեւյալը.
echo $ SHLVL
Ինչպես հայտնի է, տերմինալային պատուհանից նվազագույն շերտերի մակարդակը 2 է:
Այժմ տերմինալային պատուհանը ներառում է հետեւյալը.
sh
Sh- ի հրամանը ինքնուրույն վարում է ինտերակտիվ վահանակ, ինչը նշանակում է, որ դուք օգտագործում եք մի շաբլոնի միջով կամ ենթահեղձում:
Եթե հիմա նորից գրեք:
echo $ SHLVL
Դուք կտեսնեք, որ վահանակի մակարդակը սահմանվում է 3-ի վրա: Ներքին հրամանների ներգրավումը ենթախմբի ներսումից կբացվի ենթավերնագրի ենթախմբում եւ այդպիսով վահանակի մակարդակը կլինի 4-րդ մակարդակում:
Ինչու է Shell- ի մակարդակը կարեւոր է:
Shell- ի մակարդակը կարեւոր է, երբ մտածում եք ձեր սցենարների շրջանակներում փոփոխականների շրջանակը:
Սկսենք մի պարզ բանով.
շուն = maisie
echo $ dog
Եթե դուք վարում եք վերը նշված հրամանները մի շերտում, ապա maisie բառը կցուցադրվի տերմինալային պատուհան:
Բացեք նոր վահանակ `մուտքագրելով հետեւյալը.
sh
Եթե դուք այս հրամանին եք անցնում, կտեսնեք, որ ոչինչ չի ստացվում:
echo $ dog
Դա այն է, որ $ dog փոխակերպիչը հասանելի է միայն վահանակի մակարդակով 2: Եթե մուտքագրեք ելք, դուրս գալու ենթաբաժինը եւ գործարկեք echo $ dog- ը կրկին կտեղադրվի maisie բառը:
Կարեւոր է նաեւ մտածել գլոբալ փոփոխականների վարքագծի մասին:
Սկսեք նոր տերմինալային պատուհանում եւ մուտքագրեք հետեւյալը.
արտահանման շունը = maisie
echo $ dog
Ինչպես սպասում եք, maisie բառը ցուցադրվում է: Այժմ բացեք ենթավերնագիր եւ կրկին echo $ dog ը: Այս անգամ կտեսնեք, որ maisie բառը դրսեւորվում է, թեեւ դուք գտնվում եք ենթաբաժնում:
Պատճառը դրա պատճառն այն է, որ արտահանման հրամանատարությունը կատարել է $ dog փոփոխական գլոբալ: Փոխարինելով $ dog փոփոխական ենթավերնագրի մեջ, նույնիսկ եթե դուք օգտագործում եք արտահանման հրամանը, չի ազդում իր ծնողների վրա:
Հուսով եմ, որ դրանից սկսած դուք կարող եք տեսնել, որ սքանչելի գրելու ժամանակ որոշակի նշանակություն ունի աշխատելու համար:
Այն օրինակները, որոնք ես տվել եմ, շատ պարզունակ է, բայց դա բավականին տարածված է մեկ շերտային սցենարի համար, որը կոչվում է մեկ այլ shell script, որն էլ իր հերթին կոչ է անում այլ շերտերի սցենար, որոնց բոլորը այժմ աշխատում են տարբեր մակարդակներում: Իմանալով շերտերի մակարդակը, կարող է շատ կարեւոր լինել: