Quantcast
Channel: Библиотека знаний
Viewing all articles
Browse latest Browse all 1318

Bash - [Массивы]

$
0
0

Bash

Файлы конфигурации: .profile .bash_profile и .bashrc итд

В чем отличие .bash_profile и .bashrc?

.bash_profile загружается только при входе пользователя в систему (консольный вход, ssh), в то время как .bashrc запускается для интерактивных сервисов выполняемых без логина (запуск xterm).

Переменные и параметры

$$ pid текущего shell (самого процесса-сценария)
$! pid последнего процесса в фоновом режиме
$? код возврата последнего процесса (функции или скрипта)
$x где x — номер параметра, переданного скрипту ($1, $2 и т. д., $0 — последний запущенный скрипт)
$# количество аргументов командной строки
$* все аргументы в виде одной строки (слова)
$@ то же самое, что и $*, но при этом каждый параметр представлен как отдельная строка (слово)
$- список флагов, переданных сценарию
$_ содержит последний аргумент предыдущей команды

Потоки вывода и файловые дескрипторы

  • du -h 1 > ./log 2>&1
НаименованиеОписание
1Поток вывода
2Поток ошибок
&1обозначает файловый дескриптор 1

Конструкции

0-9

A

Массивы

array=( one two three )files=("/etc/passwd""/etc/group""/etc/hosts")limits=(10, 20, 26, 39, 48)

ARGV

# ------------- SCRIPT ------------- # 
#!/bin/bash 
echoecho"# arguments called with ---->  ${@}"echo"# \$1 ---------------------->  $1       "echo"# \$2 ---------------------->  $2       "echo"# path to me --------------->  ${0}"echo"# parent path -------------->  ${0%/*}"echo"# my name ------------------>  ${0##*/}"echoexit 
# ------------- CALLED ------------- # 
# Notice on the next line, the first argument is called within double, # and single quotes, since it contains two words 
$  /misc/shell_scripts/check_root/show_parms.sh "'hello there'""'william'" 
# ------------- RESULTS ------------- # 
# arguments called with --->  'hello there' 'william'# $1 ---------------------->  'hello there'# $2 ---------------------->  'william'# path to me -------------->  /misc/shell_scripts/check_root/show_parms.sh# parent path ------------->  /misc/shell_scripts/check_root# my name ----------------->  show_parms.sh 
# ------------- END ------------- #

B

C

case

case "$1" in
start)
esac

cut

микропрограмма для работы с текстом

Параметры:

  • -d
  • -f(число)

Переименовывает все файлы вида thread_1_seq_35970.1752.876204343 в файлы вида arch_1_0000035970_869578613.arc

#! /bin/bashFOUND=0for filename in*doecho"$filename"|grep-q"thread_1_seq_" 
  if[$?-eq$FOUND]; thenpart=`echo$filename|cut-d"_"-f4|cut-d"." -f1`mv"$filename""arch_1_00000${part}_869578613.arc"fi 
done

D

debug

Необходимо добавить параметр -x Пример:

# bash -x script.sh

dialog

Представляет из себя интерфейс для библиотеки ncurses. И позволяет строить диалоги из скрипта. Альтернативой dialog может служить whiptail, который даже присутствует в некоторых системах по умолчанию.

Dialog

#!/usr/bin/bash 
Choice=`$Dialog--stdout--clear--menu"Выберите файл"207114$Spisok`retval=$? 
case$retvalin0)esac

E

F

function

function f1{ 
	# params $1echo$1 
} 
f1 A

foreach

for fn in`cat filenames.txt`; doecho"the next file is $fn"cat$fndone
whileread filename
doecho"Printing: $filename"cat"$filename"done< filenames.txt
for fn incat filenames.txt; docat"$fn"; done
for i in"${arrayName[@]}"do
   :
   # do whatever on $idone

G

H

Choice="Y" 
cat<< EOF_CONFIG >$config
client
remote xxxxx
port 1194
proto udp
dev tun
ns-cert-type server
tls-client
reneg-sec 60
mtu-test
cipher AES-256-CBC
comp-lzo
persist-key
persist-tun
keysize 256
nobind
explicit-exit-notify 2
pkcs12 yyy/$Choice
EOF_CONFIG
 
echo$config

I

Индексы

  • [@] - Ссылка на копию массива в переменной $1
  • [*] - Строка
  • [n]
  • var=(1 2 3 4)
  • echo ${var[@]}

if

ifчто-то
then# делать тот-тоelse# делать тот-тоfi
ifчто-то; then# делать тот-тоelse# делать тот-тоfi

input

Запрос символа от пользователя

echo-n"Продолжить? (y/n) " 
read item
case"$item"in
    y|Y)echo"Ввели «y», продолжаем...";;
    n|N)echo"Ввели «n», завершаем..."exit0;;*)echo"Ничего не ввели. Выполняем действие по умолчанию...";;esac

J

K

L

M

N

O

echo

Вывод прогресс бара

$ echo-ne'#####                     (33%)\r'

P

Q

R

S

select

select action in"Опция 1""Опция 2""Выход"doecho$actiontest$action = "Выход"&&breakdone

T

test

Применение в коде

if[$daynow!= 1]; then# ....fi 
if[$daynow-ge1]&&[$daynow-le7]; then# ....fi

Сравнение -eqс ==

$ [ a == a ]; echo$?0 
$ [ a -eq a ]; echo$?
-bash: [: a: integer expression expected
2

status

Проверка статуса выполнения программы

rm test_file
 
if[$?-eq0]; thenecho-n"$(tput hpa $(tput cols))$(tput cub 6)[OK]"echoelseecho-n"$(tput hpa $(tput cols))$(tput cub 6)[fail]"echofi

tput

Команда tput инициализирует и управляет вашими сеансами работы с терминалом, используя базу данных terminfo. С помощью tput вы можете управлять различными функциями терминала, такими как перемещение или изменение вида курсора, изменение свойств текста и очистка определенных областей экрана терминала.

  • tput hpa N — сдвиг курсора на N позиций
  • tput cols получает ширину окна терминала
  • tput cub 6 — сдвигает курсор на 6 позиций влево

Также можно выставить цвет

  • tput setaf 0..7 — цвет текста
  • tput setab 0..7 — цвет фона
  • tput sgr0 — сброс на дефолтный

Подробнее: http://www.ibm.com/developerworks/ru/library/au-learningtput/

U

V

W

X

Y


Viewing all articles
Browse latest Browse all 1318