Операторы сравнения в unix shell

Comparison and Check Operators

During the usage of the we generally need to check cases by using comparison and check operators. They can be used to check if a file exists or a given number is greater than the other. Here we will list some of the most useful comparisons and check operators which can be used for cases.

Negative EXPRESSION

While using we will use logical true and false. We can revert given logic back by prefixing the logic value with . If the given value is true and prefixed with it will be false. If the given value is false and prefixed with it will be true.

  • is equal to the false
  • is equal to the true

STRING1 Is Equal To STRING2

One of the most used comparisons and check operator is checking if two given string is equal or the same. We can use an equal sign like below.

INTEGER1 Is Equal To INTEGER2

Another useful and popular comparison and check operation are checking if two given integer is equal numerically. We can use operator like below.

INTEGER1 Is Greater Than  INTEGER2

Another useful and popular comparison and check operation are checking if INTEGER1 is greater than INTEGER2 numerically. We can use operator like below.

INTEGER1 Is Greater Than Or Equal To  INTEGER2

Another useful and popular comparison and check operation are checking if INTEGER1 is greater than or equal to INTEGER2 numerically. We can use operator like below.

INTEGER1 Is Less Than  INTEGER2

Another useful and popular comparison and check operation are checking if INTEGER1 is less than  INTEGER2 numerically. We can use operator like below.

INTEGER1 Is Less Than Or Equal To  INTEGER2

Another useful and popular comparison and check operation are checking if INTEGER1 is less than or equal to INTEGER2 numerically. We can use operator like below.

We can also check some file and directory properties. We can check if the given file is a directory and exists with the operator.

We can check if the given file exists and there is some content inside it which means it is not empty and size is greater then zero.

The [ Command

Surprisingly, is just another command. It’s distributed alongside and
its usage is identical with one minor difference: a trailing is required.
This bit of cleverness leads to an intuitive and familiar form when the
command is paired with :

Unfortunately, many users come across this usage first and assume the brackets
are part of itself. This can lead to some nonsensical statements.

Case in point, this is incorrect:

And so is this:

The former is passing a number of meaningless words as arguments to the
command; the latter is passing the string output by the (quieted)
invocation to the command.

There are cases where you might want to test the output of some command as a
string. This would lead you to use a command and brackets together. However,
there is almost always a better way.

As with most things, quoting is extremely important. Take the following example:

You’ll find if you run this code, it doesn’t work. The command returns false
even though we can clearly see that is in fact empty (a string of ero
size).

Since is valid usage for , what’s actually being executed by the
shell is this:

The fix is to quote correctly:

When are quotes needed? Well, to paraphrase Bryan Liles…

Examples: ,

In addition to properly quoting, other steps may be required to prevent
(or ) from incorrectly parsing one of your positional arguments as an option.
Consider the following:

Some implementations of will interpret as its option rather
than the literal string :

Note that it’s very hard to trigger this behavior in modern shells; most will
recognize the ambiguity and correctly interpret the expression. However, if you
are deeply concerned with portability, one way to mitigate the risk is to use
the following:

The prefix will prevent “x!” from being interpreted as an option. The character
chosen doesn’t matter, but and are two common conventions.

7.2.1. if/then/else constructs

7.2.1.1. Dummy example

This is the construct to use to take one course of action if the if commands test true, and another if it tests false. An example:

freddy scripts> gender="male"

freddy scripts> if ]
More input> then echo "Pleasure to meet you, Madame."
More input> else echo "How come the lady hasn't got a drink yet?"
More input> fi
How come the lady hasn't got a drink yet?

freddy scripts>
[] vs. ]
 

Contrary to , [[ prevents word splitting of variable values. So, if VAR="var with spaces", you do not need to double quote $VAR in a test — eventhough using quotes remains a good habit. Also, [[ prevents pathname expansion, so literal strings with wildcards do not try to expand to filenames. Using [[, == and != interpret strings to the right as shell glob patterns to be matched against the value to the left, for instance: ].

Like the CONSEQUENT-COMMANDS list following the then statement, the ALTERNATE-CONSEQUENT-COMMANDS list following the else statement can hold any UNIX-style command that returns an exit status.

Another example, extending the one from :

anny ~> su -
Password:
# if ! grep ^$USER /etc/passwd 1> /dev/null
> then echo "your user account is not managed locally"
> else echo "your account is managed from the local /etc/passwd file"
> fi
your account is managed from the local /etc/passwd file
#

We switch to the root account to demonstrate the effect of the else statement — your root is usually a local account while your own user account might be managed by a central system, such as an LDAP server.

7.2.1.2. Checking command line arguments

Instead of setting a variable and then executing a script, it is frequently more elegant to put the values for the variables on the command line.

We use the positional parameters $1, $2, …, $N for this purpose. $# refers to the number of command line arguments. $0 refers to the name of the script.

The following is a simple example:

Figure 7-1. Testing of a command line argument with if

Here’s another example, using two arguments:

anny ~> cat weight.sh
#!/bin/bash

# This script prints a message about your weight if you give it your
# weight in kilos and height in centimeters.

weight="$1"
height="$2"
idealweight=$

if  ; then
  echo "You should eat a bit more fat."
else
  echo "You should eat a bit more fruit."
fi

anny ~> bash -x weight.sh 55 169
+ weight=55
+ height=169
+ idealweight=59
+ ''
+ echo 'You should eat a bit more fat.'
You should eat a bit more fat.

7.2.1.3. Testing the number of arguments

The following example shows how to change the previous script so that it prints a message if more or less than 2 arguments are given:

anny ~> cat weight.sh
#!/bin/bash

# This script prints a message about your weight if you give it your
# weight in kilos and height in centimeters.

if ; then
  echo "Usage: $0 weight_in_kilos length_in_centimeters"
  exit
fi

weight="$1"
height="$2"
idealweight=$

if  ; then
  echo "You should eat a bit more fat."
else
  echo "You should eat a bit more fruit."
fi

anny ~> weight.sh 70 150
You should eat a bit more fruit.

anny ~> weight.sh 70 150 33
Usage: ./weight.sh weight_in_kilos length_in_centimeters

The first argument is referred to as $1, the second as $2 and so on. The total number of arguments is stored in $#.

Check out for a more elegant way to print usage messages.

7.1.2. Simple applications of if

7.1.2.1. Testing exit status

The ? variable holds the exit status of the previously executed command (the most recently completed foreground process).

The following example shows a simple test:

anny ~> if 
More input> then echo 'That was a good job!'
More input> fi
That was a good job!

anny ~>

The following example demonstrates that TEST-COMMANDS might be any UNIX command that returns an exit status, and that if again returns an exit status of zero:

anny ~> if ! grep $USER /etc/passwd
More input> then echo "your user account is not managed locally"; fi
your user account is not managed locally

anny > echo $?
0

anny >

The same result can be obtained as follows:

anny > grep $USER /etc/passwd

anny > if  ; then echo "not a local account" ; fi
not a local account

anny >

7.1.2.2. Numeric comparisons

The examples below use numerical comparisons:

anny > num=`wc -l work.txt`

anny > echo $num
201

anny > if 
More input> then echo ; echo "you've worked hard enough for today."
More input> echo ; fi

you've worked hard enough for today.


anny >

This script is executed by cron every Sunday. If the week number is even, it reminds you to put out the garbage cans:

#!/bin/bash

# Calculate the week number using the date command:

WEEKOFFSET=$

# Test if we have a remainder.  If not, this is an even week so send a message.
# Else, do nothing.

if ; then
  echo "Sunday evening, put out the garbage cans." | mail -s "Garbage cans out" your@your_domain.org
fi

7.1.2.3. String comparisons

An example of comparing strings for testing the user ID:

if ; then
        echo "You have no permission to run $0 as non-root user."
        exit 1;
fi

With Bash, you can shorten this type of construct. The compact equivalent of the above test is as follows:

 && ( echo you are using a non-privileged account; exit 1 )

Similar to the «&&» expression which indicates what to do if the test proves true, «||» specifies what to do if the test is false.

Regular expressions may also be used in comparisons:

anny > gender="female"

anny > if ]
More input> then echo "Pleasure to meet you, Madame."; fi
Pleasure to meet you, Madame.

anny >
Real Programmers
 

Most programmers will prefer to use the test built-in command, which is equivalent to using square brackets for comparison, like this:

test "$(whoami)" != 'root' && (echo you are using a non-privileged account; exit 1)
No exit?
 

If you invoke the exit in a subshell, it will not pass variables to the parent. Use { and } instead of ( and ) if you do not want Bash to fork a subshell.

See the info pages for Bash for more information on pattern matching with the «(( EXPRESSION ))» and «]» constructs.

if else Syntax

Bash statement can be used in 3 different cases. Here list of their syntax.

Single Case Check

We can check for a single case or situation with the .

We will check the CASE with different logical operations like equal, greater then, same, etc. and if this case is true we will execute the COMMANDS, if not we will do not execute any commands.

Two Case Check

In two case check, we will check two cases. If the first given CASE is true we will execute COMMANDS1, if it is not true we will execute else COMMANDS2.

Multiple Case Check

In multiple case check, we will check the CASE. If it is not true CASE2 will be checked if not CASE3 will be checked. We can create a lot of cases with the . When the case is true then its COMMAND will be executed. If all of the and is false than the last part which is COMMANDSN  will be executed.

As we see there is a different type of syntax of if statements. Actually, they are very similar to each other in logic. We will look at them in detail below.

Immateriaalioikeudet

Näiden sivujen omistusoikeus, tekijänoikeus sekä muut immateriaalioikeudet kuuluvat If-konserniin kuuluvalle yhtiölle ellei erikseen ole toisin ilmoitettu. Kaikki oikeudet sivuihin ja niiden sisältöön pidätetään. Sivujen sisällön tai ulkoasun julkaiseminen, jäljentäminen, siirtäminen tai muuttaminen ilman oikeuksien omistajan lupaa on kielletty, lukuun ottamatta säilyttämistä tietokoneella tai tulostamista henkilökohtaista käyttöä varten. Aineistoa saa lainata Suomen tekijänoikeuslain (404/1961) mukaisesti. Aineistoa lainattaessa on aina ilmoitettava lähde. Sivuihin sisältyviä tavara- ja liikemerkkejä ei kuitenkaan saa kopioida, julkaista tai edelleen levittää ilman Ifin antamaa kirjallista lupaa.

Контрольная работа

Квадратные скобки ([]) в выражении if являются фактически ссылкой на командный тест . Это означает, что здесь могут использоваться все операторы, которые позволяют тестировать. Посмотрите страницу руководства для теста, чтобы увидеть все возможные операторы (их немало), но некоторые из наиболее распространенных из них перечислены ниже.

оператор Описание
! ЭКСПРЕССИЯ EXPRESSION неверно.
-n STRING Длина STRING больше нуля.
-z STRING Длина STRING равна нулю (т.е. она пуста).
STRING1 = STRING2 STRING1 равен STRING2
STRING1! = STRING2 STRING1 не равен STRING2
INTEGER1 -eq INTEGER2 INTEGER1 численно равен INTEGER2
INTEGER1 -gt INTEGER2 INTEGER1 численно больше INTEGER2
INTEGER1 -lt INTEGER2 INTEGER1 численно меньше INTEGER2
-d ФАЙЛ ФАЙЛ существует и является каталогом.
-e ФАЙЛ Файл существует.
-r ФАЙЛ ФАЙЛ существует, и разрешение на чтение предоставляется.
-s FILE ФАЙЛ существует и размер больше нуля (т. е. Он не пуст).
-W FILE ФАЙЛ существует, и разрешение на запись предоставляется.
-x ФАЙЛ ФАЙЛ существует, и разрешение на выполнение предоставляется.

Несколько замечаний:

  • = немного отличается от -eq .  вернет false как = выполняет сравнение строк (т. е. Символ для символа тот же), тогда как -eq делает числовое значение сравнения вернет true.
  • Когда мы ссылаемся на FILE выше, мы фактически подразумеваем путь . Помните, что путь может быть абсолютным или относительным и может ссылаться на файл или каталог.
  • Поскольку [] является лишь ссылкой на командный тест, мы можем экспериментировать и пытаться снимать с тестом в командной строке, чтобы убедиться, что наше понимание его поведения верное.

Давайте разберем это:

  • Строка 1 — выполнить сравнение на основе строк. Тест не печатает результат, поэтому вместо этого мы проверяем его статус выхода, что мы будем делать на следующей строке.
  • Строка 2 — переменная $? содержит статус выхода предыдущей команды запуска (в этом случае тест). 0 означает TRUE (или успех). 1 = FALSE (или отказ).
  • Строка 4 — На этот раз мы проводим численное сравнение.
  • Строка 7 — Создайте новый пустой файл myfile (предполагая, что myfile еще не существует).
  • Строка 8 — размер myfile больше нуля?
  • Строка 11 — Перенаправление некоторого содержимого в myfile, так что размер больше нуля.
  • Строка 12 — снова проверьте размер файла myfile . На этот раз он ИСТИНА.

4.7 Арифметика оболочки.

Арифметические вычисления.

Оболочка позволяет вычислять арифметические выражения как одно из
расширений оболочки или с помощью встроенной команды let.

Вычисления производятся в longint без проверки на переполнение, хотя деление на 0 прерывается и отмечается как ошибка. Нижеследующий
список операторов сгруппирован по уровням равноприоритетных операторов. Уровни располагаются в порядке уменьшения приоритета.

-+

унарные минус и плюс

!~

логическое и поразрядное отрицания

*÷%

умножение, деление, остаток

+ —

сложение и вычитание

<< >>

левый и правый поразрядные сдвиги

<= >= < >

сравнение

==!=

равенство и неравенство

&

поразрядное И

^

поразрядное исключительное ИЛИ

|

поразрядное ИЛИ

&&

логическое И

||

логическое ИЛИ

= *= ÷= %= += -= <<= >>= &= ^= |=

распределение по приоритету.

Переменные оболочки допустимы как операнды; параметрическое расширение выполняется перед вычислением выражения. Значение параметра внутри выражения обязательно longint. Переменная оболочки не обязана иметь
целый атрибут, включаемый в выражение.

Константы, начинающиеся с 0, интерпретируются как восьмиричные числа. Начало 0x или 0X обозначает шестнадцатиричное число. Кроме того,
числа в форме n, когда основание — десятичное число от 2
до 36, представляющее арифметическое основание системы счисления, а n
— число в зтой системе. Если основание не указано, подразумевается 10.

Операторы вычисляются в порядке приоритета. Субвыражения в круглых
скобках вычисляются первыми и могут не подчиняться правилам приоритета.

Арифметическое расширение.

Арифметическое расширение позволяет вычислять арифметические выражения и подставлять результат. Существуют два формата арифметического
расширения:

Вычисление выполняется согласно вышеуказанным правилам. Если выражение некорректно, Bash выдает сообщение, обозначающее сбой, и замещение невозможно.

Арифметические встроенные команды.

let

Встроенная команда let позволяет выполнять арифметические
действия над переменными оболочки. Каждое выражение вычисляется согласно приведенным ранее правилам (см. раздел
4.7.1). Если последнее вычисление равно 0, let возвращает 1,
в противном случае — 0.

A complete list for file testing in bash shell

From the test command man page:

Meaning
-b filename Return true if filename is a block special file.
-c filename Return true if filename exists and is a character special file.
-d filename Return true filename exists and is a directory.
-e filename Return true filename exists (regardless of type).
-f filename Return true filename exists and is a regular file.
-g filename Return true filename exists and its set group ID flag is set.
-h filename Return true filename exists and is a symbolic link. This operator is retained for compatibility with previous versions of this program. Do not rely on its existence; use -L instead.
-k filename Return true filename exists and its sticky bit is set.
-n filename Return true the length of string is nonzero.
-p filename Return true filename is a named pipe (FIFO).
-r filename Return truefilename exists and is readable.
-s filename Return true filename exists and has a size greater than zero.
-t file_descriptor Return true the filename whose file descriptor number is file_descriptor is open and is associated with a terminal.
-u filename Return true filename exists and its set user ID flag is set.
-w filename Return true filename exists and is writable. True indicates only that the write flag is on. The file is not writable on a read-only file system even if this test indicates true.
-x filename Return true filename exists and is executable. True indicates only that the execute flag is on. If file is a directory, true indicates that file can be searched.
-z string Return true the length of string is zero.
-L filename Return true filename exists and is a symbolic link.
-O filename Return true filename exists and its owner matches the effective user id of this process.
-G filename Return true filename exists and its group matches the effective group id of this process.
-S filename Return true filename exists and is a socket.
file1 -nt file2 True if file1 exists and is newer than file2.
file1 -ot file2 True if file1 exists and is older than file2.
file1 -ef file2 True if file1 and file2 exist and refer to the same file.

Case

Иногда мы можем захотеть использовать разные пути, основанные на переменной, соответствующей ряду шаблонов. Мы могли бы использовать ряд утверждений if и elif, но это скоро вырастет, чтобы быть недвусмысленно. К счастью, есть case, который может сделать многие вещи удобнее. Это немного сложно объяснить, поэтому вот несколько примеров, чтобы проиллюстрировать:

Shell

case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac

1
2
3
4
5
6
7
8

case<variable>in

<pattern1>)

<commands>

;;

<pattern2>)

<other commands>

;;

esac

Вот пример:

case.sh

Shell

#!/bin/bash
# case example

case $1 in
start)
echo starting
;;
stop)
echo stoping
;;
restart)
echo restarting
;;
*)
echo don\’t know
;;
esac

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

#!/bin/bash
# case example
 

case$1in

start)

echostarting

;;

stop)

echostoping

;;

restart)

echorestarting

;;

*)

echodon\’tknow

;;

esac

Давайте разберем это:

Строка 4 — Эта строка начинает механизм case.

Строка 5 — Если $ 1 равно «start», выполните следующие действия. the) означает конец рисунка.

Строка 7 — Мы идентифицируем конец этого набора операторов с двойной точкой с запятой (;;). После этого следует рассмотреть следующий случай.

Строка 14 — Помните, что тест для каждого случая является шаблоном. * Представляет собой любое количество любых символов. Очень важно поймать все, если, если ни один из других случаев не соответствует. Это не обязательно, но часто используется.

Строка 17 — esac — это случай назад и указывает, что мы находимся в конце описания дела. Любые другие утверждения после этого будут выполняться в обычном режиме.

Теперь давайте рассмотрим несколько более сложный пример, где шаблоны используются немного больше.

disk_useage.sh

Shell

#!/bin/bash
# Print a message about disk useage.

space_free=$( df -h | awk ‘{ print $5 }’ | sort -n | tail -n 1 | sed ‘s/%//’ )

case $space_free in
*)
echo Plenty of disk space available
;;
*)
echo There could be a problem in the near future
;;
8*)
echo Maybe we should look at clearing out old files
;;
9*)
echo We could have a serious problem on our hands soon
;;
*)
echo Something is not quite right here
;;
esac

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#!/bin/bash
# Print a message about disk useage.
 

space_free=$(df-h|awk'{ print $5 }’|sort-n|tail-n1|sed’s/%//’)

case$space_freein

1-5*)

echoPlenty of disk space available

;;

6-7*)

echoThere could beaproblem inthe near future

;;

8*)

echoMaybe we should look atclearing out old files

;;

9*)

echoWe could haveaserious problem on our hands soon

;;

*)

echoSomething isnotquite right here

;;

esac

Часть 4. Сложение, вычитание, умножение, деление, модуль в Bash
Часть 6. Циклы for, while, until в Bash

7.3.2. Initscript example

Initscripts often make use of case statements for starting, stopping and querying system services. This is an excerpt of the script that starts Anacron, a daemon that runs commands periodically with a frequency specified in days.

case "$1" in
        start)
            start
            ;;
         
        stop)
            stop
            ;;
         
        status)
            status anacron
            ;;
        restart)
            stop
            start
            ;;
        condrestart)
            if test "x`pidof anacron`" != x; then
                stop
                start
            fi
            ;;
         
        *)
            echo $"Usage: $0 {start|stop|restart|condrestart|status}"
            exit 1
 
esac

The tasks to execute in each case, such as stopping and starting the daemon, are defined in functions, which are partially sourced from the /etc/rc.d/init.d/functions file. See Chapter 11 for more explanation.

Цветной терминал (консоль) в Linux

В Debian 8 достаточно для root раскоментировать строки в /root/.bashrc

# You may uncomment the following lines if you want `ls' to be colorized:
export LS_OPTIONS='--color=auto'
eval "`dircolors`"
alias ls='ls $LS_OPTIONS'
alias ll='ls $LS_OPTIONS -l'
alias l='ls $LS_OPTIONS -lA'

Для пользовательской консоли включить force_color_prompt=yes в файле /home/<username>/.bashrc

Позиционные переменные (параметры запуска скрипта)

При вызове команды или сценария с аргументами, имя команды и её аргументы являются позиционными переменными. Позиционными они называются, потому что внутри сценария обращение к ним происходит по позиции в командной строке.

  • $0 … $9 — при запуске допускается не более 9 параметров передавать в скрипт. Переменная $0 является именем скрипта.
  • $# — количество параметров переданных скрипту
  • $? — код возврата программы. echo $? — вывести ошибку с которой закончил выполняться предыдущий скрипт (программа), например, выведет 0 (true) если имя пользователя root

    test "root" = "$USER" ; echo $?
  • $* и $@ — все параметры командной строки. echo $* — выведет все значения параметров.
  • $! — PID программы, запущенной в background режиме.
  • $$ — PID процесса shell.

Отладка скриптов bash

Для отладки скриптов bash можно использовать встроенный набор команд. Можно включать и выключать режим отладки используя следующие команды внутри скрипта:

  • set -x — (set -o xtrace) показывать команды и параметры, которые выполняются;
  • set -v — (set -o verbose) печатает входные строки сразу по мере их считывания;
  • set -f — (set -o noglob) отключается генерация имени файла с помощью метасимволов (подстановка).

В одном и том же скрипте вы можете включать и выключать отладочный режим столько раз, сколько это необходимо. Символ «-» используется для активации параметра командной оболочки, а символ «+» — для его деактивации.

Пример. Отладка прервется после первого выполнения цикла, что будет видно в результате выполнения этого скрипта.

#!/bin/bash
clear

# включаем режим отладки
set -x
for i in 0 1 2 3 4
do
echo "Console number is $i" 
# выключаем режим отладки
set +x
done

exit 0

Массивы bash

#!/bin/bash
car=(bmw mers lada audi)

# вывести второй элемент массива
echo ${car}
# вывести все элементы массива
echo ${car}

The if Statement

The if statement allows you to specify courses of action to be taken in a shell script, depending on the success or failure of some command. It is a conditional statement that allows a test before performing another statement. The syntax for the simplest form is:

if  
then
	block_of_statements
fi

Here,

  • The condition in the if statement often involves a numerical or string test comparison, but it can also be any command that returns a status of 0 when it succeeds and some nonzero status when it fails.
  • The statements that follow the then statement can be any valid UNIX command, any executable user program, any executable shell script, or any shell statement with the exception of fi.
  • End every if statement with the fi statement.

Syitä vakuuttaa itsesi ja omaisuutesi

Jotkut vakuutukset ovat pakollisia. Esimerkiksi autonomistajien on hankittava lakisääteinen liikennevakuutus. Vuokra-asuntojen ehdoissa puolestaan vaaditaan yleensä kotivakuutuksen ottamista.

Vapaaehtoisia vakuutuksia otetaan ennakoiden mahdollisia taloudellisesti vaikeita tilanteita tulevaisuudessa. Jos esimerkiksi lapsesi sairastuu ulkomaanmatkalla, sairaalakulut voivat nousta yllättävän suuriksi ilman matkavakuutusta.

Erityisesti henkilövakuutusten tarpeen hahmottaminen on usein hankalaa, koska sosiaaliturvan ja esimerkiksi työterveydenhuollon kattavuutta on haastavaa arvioida. Siksi teimme avuksesi henkilövakuutustestin, josta näet muutamassa minuutissa, millaisia henkilövakuutuksia juuri sinun kannattaa harkita.

Узнайте об этом больше

Если вы захотите узнать больше о Bash скриптинге в Linux, прочитайте руководство
«LPI
exam 102 prep: Shells, scripting, programming, and compiling (LPI
exam 102 prep: Shell-коды, написание скриптов, программирование и компилирование)»
из которого была взята данная статья, или обратитесь к другим
ниже. Не забудьте .

Похожие темы

  • Оригинал этой статьи
  • Просмотрите руководство
    «LPI
    exam 102 prep: Shells, scripting, programming, and compiling»
    (developerWorks, Январь 2007), чтобы найти более подробную информацию про кастомизацию Bash shell и скриптпнг в Linux.
    Оно является частью серии
    LPI
    exam prep tutorial series (Серии руководств LPI
    exam prep), которая рассказывает об основах Linux и помогает в подготовке к аттестации по специальности системного администратора.
  • Прочитайте на developerWorks эти статьи, чтобы узнать о других способах работы с Bash:
    • Bash в
      примерах, Часть 1: Основы программирования в Bourne again shell (bash)
    • Bash в
      примерах, Часть 2: Дальнейшие основы bash программирования
    • Bash в
      примерах, часть 3: О системе ebuild
    • System Administration Toolkit: Get the most out of bash(Набор инструментов системного администрирования: добейтесь лучшего результата с bash)
    • Working in the bash shell
  • «Shell Command Language(Язык команд Shell)»
    — здесь вы найдете язык команд shell в формате The Open Group и IEEE.
  • Найдите еще больше
    руководств
    для разработчиков Linux
    в
    разделе Linux на developerWorks
    .
  • Скачайте
    испытываемое программное обеспечение IBM
    прямо с developerWorks.

Циклы. Цикл until-do.

Синтаксис

until TEST-COMMAND; do CONSEQUENT-COMMANDS; done # синтаксис для записи цикла в одну строку

Оператор case

Оператор case всегда завершается ключевым словом esac.

case строка in
шаблон)
список операторов
;;
 ]
esac

Оператор case поочерёдно сравнивает строку с шаблонами. Если шаблон совпадает, то выполняется группа операторов, находящихся между шаблоном и специальными символами «;;». После выполнения всех строк управление передается операторам, находящимся за ключевым словом esac.

Функции

Функцию в shell можно определить двумя способами: при помощи оператора function или после имени функции написать открывающую и закрывающую круглые скобки. Тело функции располагается между фигурными скобками.

eval

eval arg1  ... 

Транслирует список аргументов, из списка, в команды.

Пример. Демонстрация команды eval

#!/bin/bash

y=`eval ls -l`  # Подобно y=`ls -l`
echo $y         # но символы перевода строки не выводятся, поскольку имя переменной не в кавычках.
echo
echo "$y"       # Если имя переменной записать в кавычках -- символы перевода строки сохраняются.

echo; echo

y=`eval df`     # Аналогично y=`df`
echo $y         # но без символов перевода строки.

#  Когда производится подавление вывода символов LF (перевод строки), то анализ
#+ результатов различными утилитами, такими как awk, можно сделать проще.

exit 0

trap — jбработка прерываний

Команда trap позволяет переопределить стандартную реакцию программы на получаемые сигналы. Бывает необходимо защитить выполнение программы от прерывания. Формат команды trap:

trap 'список команд' сигналы

Если в системе возникнут прерывания, чьи сигналы перечислены через пробел в «сигналы», то будет выполнен «список команд», после чего (если в списке команд не была выполнена команда «exit») управление вернется в точку прерывания и продолжится выполнение командного файла.

Наиболее часто приходится встречаться со следующими прерываниями, соответствующими сигналам:

0 	выход из интерпретатора,
1 	отбой (отключение удаленного абонента),
2 	прерывание от <Del>,
9 	уничтожение (не перехватывается),
15 	окончание выполнения.

Например, если перед прекращением по прерываниям выполнения какого то командного файла необходимо удалить файлы в «/tmp», то это может быть выполнено командой «trap»:

 trap 'rm /tmp/* ; exit 1' 1 2 15

которая предшествует прочим командам файла. Здесь, после удаления файлов будет осуществлён выход «exit» из командного файла.

Команда «trap» позволяет и просто игнорировать прерывания, если «список команд» пустой. Так например, если команда «cmd» выполняется очень долго, а пользователь решил отключиться от системы, то для продолжения выполнения этой команды можно написать, запустив команду в фоновом режиме:

  ( trap '' 1; cmd )&

Matkavahinkojen ennaltaehkäisy

Vaikuta itse omaan matkustusturvallisuuteesi jo ennen matkalle lähtöä. Silloin voit matkustaa turvallisemmin mielin ja välttyä hankalien asioiden selvityksiltä matkan aikana.

Muutamia vinkkejä:

  • Hanki matkatoimistostasi riittävät ennakkotiedot matkakohteesta.
  • Jätä yhteystiedot sekä kotiväelle että työpaikalle.
  • Ota kopiot lipuista sekä muista tärkeistä asiakirjoista (passi, viisumi).
  • Varmista pankistasi, että maksuvälineesi on voimassa kohdemaassa.
  • Tarkista, että yrityksen matkavakuutus on kunnossa.
  • Huolehdi matkan aikana omasta ja työnantajasi omaisuudesta (esim. kannettava tietokone).
  • Noudata työpaikkasi matkustusohjeita.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *