GNU/Linux >> Znalost Linux >  >> Linux

5 Příklady prohlášení o případu Bash

Příkaz případu v shellu Bash je podobný příkazu switch v C. Lze jej použít k testování jednoduchých hodnot, jako jsou celá čísla a znaky.

Příkaz Case není smyčka, neprovádí blok kódu nkrát. Místo toho bash shell kontroluje stav a řídí tok programu.

V tomto článku si projdeme příkaz bash case s 5 praktickými příklady.

Konstrukce případu v bash shell nám umožňuje testovat řetězce proti vzorům, které mohou obsahovat zástupné znaky. Příkaz Bash case je nejjednodušší formou příkazu bash if-then-else.

Syntaxe příkazu bash case.

case expression in
    pattern1 )
        statements ;;
    pattern2 )
        statements ;;
    ...
esac

Níže jsou uvedeny klíčové body prohlášení bash case:

  • Příkaz Case nejprve rozšíří výraz a pokusí se jej porovnat s každým vzorem.
  • Když je nalezena shoda, všechny související příkazy až do provedení dvojitého středníku (;;).
  • Po první shodě se případ ukončí stavem ukončení posledního provedeného příkazu.
  • Pokud neexistuje žádná shoda, výstupní stav případu je nula.

Příklad Bash 1. Odeslání signálu do procesu

Následující skript přijímá číslo signálu a id procesu jako argumenty a odesílá signál danému id procesu pomocí názvu signálu.

Tento skript má demonstrovat použití příkazu case.

$ cat signal.sh
#!/bin/bash

if [ $# -lt 2 ]
then
        echo "Usage : $0 Signalnumber PID"
        exit
fi

case "$1" in

1)  echo "Sending SIGHUP signal"
    kill -SIGHUP $2
    ;;
2)  echo  "Sending SIGINT signal"
    kill -SIGINT $2
    ;;
3)  echo  "Sending SIGQUIT signal"
    kill -SIGQUIT $2
    ;;
9) echo  "Sending SIGKILL signal"
   kill -SIGKILL $2
   ;;
*) echo "Signal number $1 is not processed"
   ;;
esac

Ve výše uvedeném příkladu:

  • $1 a $2 jsou číslo signálu a ID procesu.
  • Pomocí příkazu kill odešle odpovídající signál danému id procesu.
  • Provede příkaz spánku po dobu několika sekund.
  • Nepovinné poslední srovnání *) je výchozí velikost písmen a shoduje se s čímkoli.

Použití výše uvedeného skriptu shellu:Zjistěte id procesu příkazu sleep a odešlete tomuto id procesu signál zabití, abyste proces ukončili.

$ sleep 1000

$ ps -a | grep sleep
23277 pts/2    00:00:00 sleep

$ ./signal.sh 9 23277
Sending SIGKILL signal

$ sleep 1000
Killed

Podívejte se také na náš dřívější článek o ukončení – 4 způsoby ukončení procesu.

Příklad případu Bash. 2. Shoda vzoru v souboru

Tento příklad vytiskne počet řádků, počet slov a odstraní řádky, které odpovídají danému vzoru.

$ cat fileop.sh
#!/bin/bash

# Check 3 arguments are given #
if [ $# -lt 3 ]
then
        echo "Usage : $0 option pattern filename"
        exit
fi

# Check the given file is exist #
if [ ! -f $3 ]
then
        echo "Filename given \"$3\" doesn't exist"
        exit
fi

case "$1" in

# Count number of lines matches
-i) echo "Number of lines matches with the pattern $2 :"
    grep -c -i $2 $3
    ;;
# Count number of words matches
-c) echo "Number of words matches with the pattern $2 :"
    grep -o -i $2 $3 | wc -l
    ;;
# print all the matched lines
-p) echo "Lines matches with the pattern $2 :"
    grep -i $2 $3
    ;;
# Delete all the lines matches with the pattern
-d) echo "After deleting the lines matches with the pattern $2 :"
    sed -n "/$2/!p" $3
    ;;
*) echo "Invalid option"
   ;;
esac

Spuštění výše uvedeného skriptu je zobrazeno níže.

$ cat text
Vim is a text editor released by Bram Moolenaar in 1991 for the Amiga computer.
The name "Vim" is an acronym for "Vi IMproved" because Vim was created as an extended version of the vi editor, with many additional features designed to be helpful in editing program source code.
Although Vim was originally released for the Amiga, Vim has since been developed to be cross-platform, supporting many other platforms.
It is the most popular editor amongst Linux Journal readers.

Bash case výstup regulárního výrazu. Po smazání řádků odpovídá vzoru Vim:

$ ./fileop.sh  -d Vim text
It is the most popular editor amongst Linux Journal readers.

Podívejte se také na náš dřívější článek o Bash ~ expansaion a { ​​} expanzi.

Příklad případu Bash 3. Najděte typ souboru z rozšíření

Tento příklad vypíše typ souboru (text, Csource atd.) na základě přípony názvu souboru.

$ cat filetype.sh
#!/bin/bash
for filename in $(ls)
do
	# Take extension available in a filename
        ext=${filename##*\.}
        case "$ext" in
        c) echo "$filename : C source file"
           ;;
        o) echo "$filename : Object file"
           ;;
        sh) echo "$filename : Shell script"
            ;;
        txt) echo "$filename : Text file"
             ;;
        *) echo " $filename : Not processed"
           ;;
esac
done

$ ./filetype.sh
a.c : C source file
b.c : C source file
c1.txt : Text file
fileop.sh : Shell script
obj.o : Object file
text : Not processed
t.o : Object file

Příklad případu Bash 4. Dotázat se uživatele s Ano nebo Ne

Při většině instalace softwaru se během licenční smlouvy zeptá uživatele na ano nebo ne. Následující fragment kódu je jedním ze způsobů, jak od uživatele získat ano nebo ne.

$ cat yorno.sh
#!/bin/bash

echo -n "Do you agree with this? [yes or no]: "
read yno
case $yno in

        [yY] | [yY][Ee][Ss] )
                echo "Agreed"
                ;;

        [nN] | [n|N][O|o] )
                echo "Not agreed, you can't proceed the installation";
                exit 1
                ;;
        *) echo "Invalid input"
            ;;
esac

$ ./yorno.sh
Do you agree with this? [yes or no]: YES
Agreed

Pokud existuje několik vzorů oddělených svislými znaky, výraz se může shodovat s kterýmkoli z nich, aby bylo možné spustit související příkazy. Vzory jsou kontrolovány v pořadí, dokud není nalezena shoda; pokud není žádný nalezen, nic se neděje.

Podívejte se také na náš dřívější článek s příklady 15 bashových polí.

Příklad případu Bash 5. Spouštěcí skript

Spouštěcí skripty v adresáři /etc/init.d používají ke spuštění a zastavení aplikace příkaz case.

Můžete použít jakýkoli druh vzorů, ale vždy se doporučuje použít příkaz case, když testujete na hodnotách primitiv. (tj. celá čísla nebo znaky).

$ cat startpcapp
#!/bin/bash

case "$1" in
'start')
echo "Starting application"
/usr/bin/startpc
;;
'stop')
echo "Stopping application"
/usr/bin/stoppc
;;
'restart')
echo "Usage: $0 [start|stop]"
;;
esac

$ ./startpcapp start
Starting application
/usr/bin/startpc started

Doporučená četba

Bash 101 Hacks, od Rameshe Natarajan . Většinu času trávím v prostředí Linuxu. Takže jsem přirozeně velkým fanouškem Bash příkazového řádku a skriptování v shellu. Před 15 lety, když jsem pracoval na různých variantách *nix, jsem psal hodně kódu na C shellu a Korn shellu. Později, když jsem začal pracovat na Linuxu jako správce systému, jsem téměř automatizoval všechny možné úkoly pomocí skriptování v prostředí Bash. Na základě mých zkušeností s Bash jsem napsal e-knihu Bash 101 Hacks, která obsahuje 101 praktických příkladů jak pro příkazový řádek Bash, tak pro skriptování shellu. Pokud přemýšlíte o zvládnutí Bash, udělejte si laskavost a přečtěte si tuto knihu, která vám pomůže převzít kontrolu nad příkazovým řádkem Bash a skriptováním shellu.


Linux
  1. 6 Bashových příkladů podmíněných výrazů ( -e, -eq, -z, !=, [, [[ ..)

  2. 4 Příklady příkazů Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

  3. Bash for smyčky Příklady

  1. Použití případových prohlášení v Bash

  2. Bash/sh příkaz „jestli je to jinak“.

  3. Existuje příkaz goto v bash?

  1. Jak napsat Bash skript s příklady

  2. Bash If-Else prohlášení s příklady

  3. 4 Příklady prohlášení Awk If ( if, if else, if else if, :? )