3.9    Proměnné C shellu

Definice a nastavení hodnoty příkazem set

<<vzad obsah vpřed>>

3.10   Proměnné prostředí a předdefinované proměnné C shellu

Proměnné prostředí

Předdefinované proměnné

Nejsou součástí prostředí, synovské procesy je nedědí.

.
Proměnná Popis
autologout specifikuje čas nečinnosti v minutách, pro automatické odhlášení
argv seznam argumentů předávaných C shellu z příkazové řádky - argv[1] obsahuje poziční parametr $1, argv[2] $2 atd
cdpath seznam adresářů pro hledání relativně zadaných adresářů v příkazech cd, popd
cwd úplné jméno aktuálního adresáře
echo nastaví se volbou -x při vyvolání csh, opisuje každý příkaz a jeho argumenty před provedením
fignore seznam jmen souborů, pro které se ignoruje ukončovací akce na konci vstupu řádku z terminálu (např. .c, .h, .o atd.)
filec nastaví ukončovací akci na konci vstupu řádky z terminálu pro jména souborů . Je-li nastavena, pak stisk CTRL D (EOF) vytiskne jména všech souborů, které začínají předcházejícím řetězcem Esc nahradí předcházející řetězec nejdelší nejednoznačnou příponou
hardpaths je-li nastavena, cesty v zásobníku adresářů neobsahují symbolické linky
histchars dvouznakový řetězec, v němž prvý charakter definuje znak, používaný místo ! v příkazech náhrady historie příkazů a druhý znak předefinuje standardní ^ v náhradě argumentů
history počet pamatovaných řádků historie příkazů
home domovský adresář, expanzní znak ~ se na tuto proměnnou odkazuje
ignoreoff je-li proměnná nastavena, pak nelze opustit C shell stiskem CTRL D, ale je třeba užít exit či logout
mail seznam souborů používaných jako schránky elektronické pošty. Předchází-li jména souborů číslo, definuje časový interval prohlížení těchto schránek (přišla-li do nich nová pošta, ohlásí to C shell uživateli). Není-li číslo uvedeno, je standardní hodnota 10 minut.
nobeep potlačí pípnutí při upozornění C shellu na nejednoznačné jméno
noclober je-li nastavena, zabraňuje přepisu existujících souborů přesměrováním standardního výstupu
noglob nastavena zakazuje expanzi jmen souborů
nonomatch nastavení ignoruje chybu, neexistuje-li soubor,jehož jméno bylo vytvořeno s použitím expanzních znaků. Nesprávný vzor je však chybou
notify nastavena způsobí oznámení zpráv o ukončení prací v pozadí
path seznam adresářů pro hledání příkazů - bývá ., /bin, ./usr/bin. Inicializuje se z proměnné prostředí PATH.
prompt řetězec, tištěný před každým příkazem interaktivního shellu, neinteraktivní shell proměnnou nenastavuje. Pokud je součástí proměnné znak !, nahradí se aktuálním číslem příkazu. Standardně je výzva % pro obyčejného uživatele, # pro superuživatele.
savehistory počet řádek historie příkazů ukládaných do souboru ~/.history při odhlašování
shell soubor obsahující interpret ( /bin/csh)
status návratový kód posledního příkazu (jako proměnná ? ve standardním shellu); pokud skončil abnormálně, přičte se k němu 0200. Vestavěné příkazy shellu vrací při chybě 1, jinak 0.
time lze přiřadit hodnotu času v sekundách, případně následovanou řetězcem položek, specifikujících, jaké prostředky systému se mají sledovat. Spotřebuje-li jakýkoliv příkaz více času CPU než je tato hodnota, vytiskne se řádek, udávající využití systémových prostředků. Řětězec specifikuje, jaké prostředky se mají tisknout. Začíná znakem % za ním následuje velké písmeno (řetězce, nesplňující tento formát se na výstup opíšou )”
  • %D průměrná velikost nesdíleného datového
  • prostoru
  • %E celkový spotřebovaný čas příkazu
  • %F chyby stránkování
  • %I počet bloků vstupních operací
  • %M maximální použitá reálná paměť
  • %O počet bloků výstupních operací
  • %P celkový čas CPU (E - spotřebovaný čas příkazu, U - uživatel, S - systém)
  • %S počet sekund, které spotřebovalo jádro na
  • uživatelský proces
  • %U počet sekund CPU věnovaných uživatelskému
  • procesu
  • %W počet odložení na disk
  • %X průměrné množství sdílené paměti v kbytech
  • standardně %U,%S%,%E%,%P,%X, %I,%O,%F,%W
verbose nastaví se volbou -v a vytiskne každý příkaz po náhradě historie, vhodné pro ladění
<<vzad obsah vpřed>>

3.11   Výrazy a operátory

Aritmetické a logické operátoty C shellu podle klesající priority
Operátor Význam
(  ) závorky
~ doplněk do jedné
! logické not
*  /  % násobení, celočíselné dělení, zbytek po celočíselném dělení
+  - sčítání, odečítání
<<  >> bitový posun vlevo,bitový posun vpravo
<  >  <=  >= menší, větší, menší nebo rovno, větší nebo rovno
==  != rovná se, nerovná se
& bitové AND
| bitové OR
^ bitové XOR
&& logické AND
|| logické OR

Testování vlastností souborů

Výraz Význam
-r soubor pravda, má-li uživatel právo čtení
-w soubor pravda, má-li uživatel právo zápisu
-x soubor pravda, má-li uživatel právo spouštění
-e soubor pravda, existuje-li soubor
-o soubor pravda, je-li uživatel vlastníkem souboru
-z soubor pravda, je-li soubor prázdný
-f soubor pravda, jde-li o obyčejný soubor
-d soubor pravda, jde-li o adresář

Pokud soubor neexistuje, všechny výrazy vracejí nepravdu.

<<vzad obsah vpřed>>

3.12   Substituce proměnných

<<vzad obsah vpřed>>

3.13   Scénáře v C shellu

Podmíněné příkazy

if (výraz)
      jednoduchý_příkaz


if (výraz) then
      seznam_příkazů
endif


if (výraz)
then
      seznam_příkazů
else
      seznam_příkazů
endif


if (výraz) then
      seznam_příkazů
else if (výraz) then
      seznam_příkazů
     ...
else
      seznam_příkazů
endif


switch (řetězec)
case vzor1:
      seznam_příkazů
      breaksw
case vzor2:
      seznam_příkazů
      breaksw
      ...
default:
      seznam_příkazů
      breaksw
endsw

Cykly

foreach proměnná(seznam_slov)
      seznam_příkazů
end


while (výraz)
      seznam_příkazů
end

V cyklech:

Příkaz goto

goto návěští

Návěští se píše obvyklým způsobem s dvojtečkou - tj. návěští:.

<<vzad obsah vpřed>>

3.14   Další vnitřní příkazy C shellu

Příkaz Význam
dirs [-l] vypíše obsah zásobníku aktuálních adresářů, seřazený od vrcholu ke spodku, volba l úplný výpis cesty, viz příkazy pushd a popd
glob seznam vypíše na standardní výstup jména všech souborů v aktuálním adresáři, které se shodují se slovy se seznamu; slova mohou obsahovat expanzní znaky pro jména souborů
hashstat vypíše statistiku úspěšných a neúspěšných startů příkazů shellu (volání exec), uložených v hašovací tabulce (nepočítají se vnitřní příkazy), pro odhad náročnosti času k nalezení příkazu
login nové přihlášení do systému, staré se předtím ukončí
logout odhlášení od systému
nice [+číslo|-číslopříkaz
  • volba +číslo zvýšení priority (pouze root)
  • volba -číslo snížení (pro všechny uživatele) priority procesu spuštěného
  • příkazem.
  • rozmezí čísla je od -20 do 19, čím
  • vyšší hodnota, tím nižší priorita.
  • Standardní hodnota: číslo=4
nohup [příkaz] ignoruje signály SIGHUP příkazu. Nezadá- li se příkaz, pak platí pro všechny následující příkazy scénáře.
onintr [ - | návěští ]
  • bez argumentu nastaví implicitní reakci shellu (odchycení a ukončení procesu)
  • argument - ignoruje všechna přerušení
  • argument návěští, při přerušení na ně skočí.
popd [+n] odstraní adresář s číslem n ze zásobníku a na vrcholu bude potom adresář uložený původně pod ním; ten se vypíše a nastaví se jako pracovní adresář. Položky v zásobníku jsou číslovány od vrcholu, počínajíce nulou. standardně se odstraní položka z vrcholu zásobníku (n=0).
pushd [+n |  adresář]
  • s argumentem +n vymění n-tou položku s vrcholem zásobníku a přepne se do adresáře nyní uloženého na vrcholu
  • s argumentem adresář uloží na vrchol zásobníku adresářů adresář, uvedený jako argument a přepne se do něj a napíše jeho jméno
  • bez argumentu vymění objekt na vrcholu zásobníku s objektem uloženým pod ním
.
rehash přidá nový příkaz do hašovací tabulky, jinak tenko příkaz není shellu známý
source [-h] scénář vykoná scénář v aktuálním shellu, jako tečka ve standardním shellu. Volba -h pouze vloží scénář do seznamu history bez skutečného provedení
time [příkaz] vypíše spotřebovaný čas příkazu, bez argumentu aktuálního shellu a všech potomků
umask [hodnota] maska pro vytvoření přístupových práv nových souborů a adresářů. Hodnota se zadává oktalově (viz příkaz ls a chmod v díle I) a udává, která přístupová práva nebudou povolena pro vlastníka, skupinu a a ostatní. Trojčíslí hodnoty se xoruje s 666 pro soubory a 777 pro adresáře a výsledkem jsou přístupová práva nových souborů. Implicitně bývá 002 , kompletní přístup pro skupinu a čtení pro ostatní či 022, kompletní přístup pro vlastníka, pro skupinu a ostatní pouze čtení.
unhash nepoužívá se hašovací tabulka pro nalezení příkazu, ale procházejí se postupně všechny adresáře v proměnné path
<<vzad obsah vpřed>>

3.15   Příklad - manažer souborů v C shellu

Scénář msoub, který byl naprogramován ve standardním shellu, je zde v C shellu. Funkce pouziti() a navod() bylo nutné nahradit kódem na příslušných místech, což je jedna z řady nevýhod C shellu pro programování.

# Scénář msoub pro manipulaci se soubory
#
# Příkazy: oprava, prohlídka, tisk, vymazání se zadávají
# stisknutím počátečního písmena (nerozlišují se malá a
 #velká) a klávesy Enter
# Použití: msoub soubor...
#
if ( $#argv < 1 ) then
     echo " Použití: menu1 soubor..." '
     exit 1
endif
foreach soubor ( $* )
     if ( ! -f $soubor ) then
       echo "$soubor neexistuje"
     endif
     while ( 1 )
       clear
       tput cup 3 5; tput smso
       echo " M A N I P U L A C E  S E  S O U B O R Y";
       tput rmso
       tput cup 4 5
       echo   _________________________________________________
       tput cup 5 25; tput smso
       echo -n "SOUBOR: "; tput rmso; echo $soubor
       tput cup 7 5; tput smso
       tput smso; echo -n O; tput rmso; echo -n "prava "
       tput smso; echo -n P; tput rmso; echo -n "rohlídka "
       tput smso; echo -n T; tput rmso; echo -n "isk "
       tput smso; echo -n V; tput rmso; echo -n "ymazání "
       tput smso; echo -n D; tput rmso; echo -n "alší "
       tput smso; echo -n K; tput rmso; echo -n "onec "
       tput cup 9 5
       echo  _________________________________________________
       tput cup 11 5
       echo -n "Vyber funkci prvním písmenem + Enter: "
       tput smso
       set odpoved = $<; tput rmso
       switch ( $odpoved )
             case [Oo]:
                  vi $soubor; breaksw
             case [Pp]:
                  vi -r $soubor; breaksw
             case [Tt]:
                  lp $soubor; breaksw
             case [Vv]:
                  rm -i $soubor; breaksw
             case [Dd]:
                  break
             case [Kk]:
                  break; break
             default:
          endsw
end
end
<<vzad obsah