BASH — различия между версиями

Материал из megapuper
Перейти к: навигация, поиск
Строка 89: Строка 89:
 
  Starting case selection...
 
  Starting case selection...
 
  Privet Petya
 
  Privet Petya
 
+
 
  # ./script Petya Alex
 
  # ./script Petya Alex
 
  Privet Petya
 
  Privet Petya
Строка 96: Строка 96:
  
  
 +
Интерактивный ввод параметра
 +
#!/bin/bash
 +
 +
if [ "$1" == "Vasya" ]; then
 +
    echo "Privet $1"
 +
else [ "$1" == "Petya" ]; then
 +
    echo "Privet $1"
 +
else echo "Zdarova $1"
 +
fi
 +
 +
echo "Please entrer something: "
 +
read x
 +
 +
# read -p "Please entrer something: " x - второй вариант
 +
 +
echo "Starting case selection..."
 +
case $x in
 +
          1) echo "This is one";;
 +
      [2-9]) echo "Two-nine";;
 +
    "Petya") echo "Privet $x";;
 +
          *) echo "Parameter unknown"
 +
esac
  
 
+
Результаты
 
+
# ./script Oleg
 +
Zdarova Oleg
 +
Enter something: 2
 +
Starting case selection...
 +
Two-nine
  
  

Версия 17:11, 9 октября 2020

Любой bash скрипт начинается со следующей строки

#!/bin/bash


Переменная $0 - равна имени файла(скрипта). Допустим имя world и скрипт выглядит так

#!/bin/bash
echo "Hello $0"

Запуск скрипта приведёт к выводу на экран

# ./world
Hello world


Все следующие $1, $2 и т.д. переменные, это параметры которые передаём скрипту. Допустим переменные будут vasya, petya.

#!/bin/bash
echo "My $0"
echo 'Privet $1'
echo 'Privet $2'

Результат

# ./script vasya petya
My script
Privet vasya
Privet petya


Цикл IF

#!/bin/bash

if [ "$1" == "Vasya" ]; then
   echo "Privet $1"
else [ "$1" == "Petya" ]; then
   echo "Privet $1"
else echo "Zdarova $1"
fi

Результаты

# ./script
Zdarova

# ./script Oleg
Zdarova Oleg

# ./script Vasya
Privet Vasya

 # ./script Petya
Privet Petya


Цикл if с case

#!/bin/bash

if [ "$1" == "Vasya" ]; then
   echo "Privet $1"
else [ "$1" == "Petya" ]; then
   echo "Privet $1"
else echo "Zdarova $1"
fi

x=$2

echo "Starting case selection..."
case $x in
         1) echo "This is one";;
     [2-9]) echo "Two-nine";;
   "Petya") echo "Privet $x";;
         *) echo "Parameter unknown"
esac

Результаты

# ./script 
Zdarova 
Starting case selection...
Parameter unknown

# ./script Oleg 3
Zdarova Oleg
Starting case selection...
Two-nine

# ./script Petya 1
Privet Petya
Starting case selection...
This is one

# ./script Vasya Petya
Privet Vasya
Starting case selection...
Privet Petya

# ./script Petya Alex
Privet Petya
Starting case selection...
Parameter unknown


Интерактивный ввод параметра

#!/bin/bash

if [ "$1" == "Vasya" ]; then
   echo "Privet $1"
else [ "$1" == "Petya" ]; then
   echo "Privet $1"
else echo "Zdarova $1"
fi

echo "Please entrer something: "
read x

# read -p "Please entrer something: " x - второй вариант

echo "Starting case selection..."
case $x in
         1) echo "This is one";;
     [2-9]) echo "Two-nine";;
   "Petya") echo "Privet $x";;
         *) echo "Parameter unknown"
esac

Результаты

# ./script Oleg
Zdarova Oleg
Enter something: 2
Starting case selection...
Two-nine









Стандартные ввод, вывод и ошибка
Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы.
Результат программы обычно печатается в стандартной вывод и иногда в файл «STDERR» (ошибка).
Все это три дескриптора файла, которые часто называют STDIN, STDOUT и STDERR.

Но часто к ним обращаются не по имени, а по номеру:
0 — STDIN, 1 — STDOUT и 2 — STDERR
По умолчанию, если не указать номер, то будет подразумеваться STDOUT.


В следующем примере

cron job command > /dev/null 2>&1

видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод).
Затем все ошибки (то есть STDERR) перенаправляет в стандартный вывод. Перед номером потока, в который перенаправляем вывод, необходимо указывать амперсанд "&"


Перенаправить все ошибки в файл( >> допишет в файл)

cron job command 2> errors.txt


Перенаправить все нормальные ответы в один файл, а все ошибки в другой

grep TEXT /etc/* > good.txt 2> errors.txt


Перенаправить и нормальные ответы и ошибки в один файл

grep TEXT /etc/* &> all.txt