Книга - BASH. Справочное пособие

a
A


Warning: mb_convert_encoding(): Unable to detect character encoding in /var/www/u2150601/data/www/ae-books.online/wp-content/themes/twentyfifteen/content.php on line 442
BASH.



Linux. , , Bash. , , , . . , Linux .







BASH.



1. .

Linux, . Linux, , init, , , getty, . , getty login, , , , /etc/passwd . (shell) Linux. , , , , , . , , command.com MS DOS, bash Unix / Linux. Bash .

....

:

.



.

()





.

, ,





.

1.1 .

Bash

-.

. . . .

.

( vi ,Emacs).

.

.

.

.

1.2 .



bash [ ][ ]

/bin/sh.

, ( ). etc/profile . profile profile

# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))

# and Bourne compatible shells (bash(1), ksh(1), ash(1), ).

if [ "${PS1-}" ]; then

if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ];



$ echo $PS1-

${debian_chroot:+($debian_chroot)}\u@\h:\w\$ -

$ echo $BASH-

/bin/bash-

$ echo $BASH

/bin/bash

then

# The file bash.bashrc already sets the default PS1.

# PS1='\h:\w\$ '

if [ -f /etc/bash.bashrc ]; then

. /etc/bash.bashrc

fi

else

root # user $

if [ "`id -u`" -eq 0 ]; then

PS1='# '

else

PS1='$ '

fi

fi

fi

/etc/profile.d

if [ -d /etc/profile.d ]; then

for i in /etc/profile.d/*.sh; do

if [ -r $i ]; then

. $i

fi

done

unset i

fi

2 .

2.1. .

.

/etc/profile

~/.bash_profile, ~/.bash_login ~/.profile

~/.bashrc

~/.bash_logout exit,

2.2 .

* .

, output

$ ls output*

output1.wav output2.wav output3.wav output4.wav

? .



$ cd video?

~/video1$

[ abc..] .

[!abc..] .

~

~max max

~+ ($PWD)

~ ($OLDPWD).



~/video1$ cd # .

$ cd # .

~/video1$

2.3. extglob.



shopt ( ).

shopt: shopt [-pqsu] [-o] [ ]

Set and unset shell options.

Options:

o restrict OPTNAMEs to those defined for use

with `set -o'

p print each shell option with an indication

of its status

q suppress output ( ).

s enable (set) each OPTNAME

u disable (unset) each OPTNAME

$shopt -s extglob

$ man shopt

shopt

?()

.

*()

.

+()

.

@()

.

! ()



1

$ cat >fs2.txt

Hello

^d

$ rm fs?(2).txt; cat fs2.txt

cat: fs2.txt:

2

$ cat >fs01.txt

Allo

$ rm fs*(01).txt; cat fs01.txt

cat: fs01.txt:

3

$ cat >fs_lin.txt

Hello friend

$ rm fs@(_lin).txt; cat fs_lin.txt

cat: fs_lin.txt:

4

$ cat >fs_lin.txt

Hello friend

$ rm fs!(lin).txt; cat fs_lin.txt

rm: 'fs!(lin).txt':

cat: fs_lin.txt:

2.4 .



alnum -

alpha

ascii ACII

blank

cntrl

digit

graph

lower

print

punct

space

upper

word alnum

xdigit



"[a-zA-Z_0-9]" "[[:alnum:]]"

"[0-9]" "[[:digit:]]"

"[a-Z]" "[[:alpha:]

[01[:alpha:]%] 0 ,1 , %.

2.5 .

, {} . BASH.

1

$ echo hi{BBB,AAA}there

hiBBBthere,hiAAAthere

2

$ echo a{d,c,b}e

ade ace abe

3

$ echo 1 to 5 is {1..5}

1 to 5 is 1 2 3 4 5

$ echo 1 to 8 by 2 {1..8}

1 to 8 by 2 1 2 3 4 5 6 7 8

( ) .

$ (date; w;)

22 2021 08:31:12 MSK

08:31:12 up 3:00, 1 user, load average: 0,02, 0,14, 0,18

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

max tty2 tty2 05:31 2:59m 0.11s 0.10s /usr/libexec/gn

[ ] (( )) .

$ cat >skobki.sh

#!/bin/bash

X=1

while [ $X -lt 5 ]

do

echo "> $X <"

X=$(( $X+1 ))

done

exit 0

$ chmod +x skobki.sh

$ ./skobki.sh

-> 1 <

-> 2 <

-> 3 <

-> 4 <

2.6 .

. $ ''

echo -e , printf %b

( ).

, printf ( ).

\a

\b 1

\c

\e

\E

\f

\n

\r

\t

\uHHHH HHHH

\nnn nnn

\

\

\?

\\



$ echo -e "Hello Friend"

Hello Friend

$ echo -e "Hello\nFriend"

Hello

Friend

$ echo -e "Hello Friend" \?

Hello Friend ?

2.7 .

$ cmd &.

{cmd1; cmd2}.

1

$ { who;pwd; }

max tty7 2019-08-12 05:17 (:0)

/home/max

(cmd1 ;cmd2)

2

$ (date; who; pwd) > logfile

$ cat logfile

3 09:03:21 MSK 2019

max tty7 2019-08-03 08:23 (:0)

/home/max

cmd1 cmd2. $cmd1 | cmd2

3, .sh



$ find *.sh -type f |xargs chmod +x



$ ls -l *.sh

cmd2 cmd1.

$ cmd1 `cmd2`

$ cat `pwd`

cat: /home/max:

md1 $(cmd2)

4,

$ touch f01 $(date)

$ ls -l f01

rw-rw-r 1 max max 0 3 09:39 f01



cmd $ ()

. $cmd1 && cmd2

$ cmd1 || cmd2

$!cmd

5

$ date || touch f81.txt; ls f81.txt

30 2020 06:43:33 MSK

ls: 'f81.txt':

$ date && touch f81.txt; ls f81.txt

30 2020 06:43:54 MSK

f81.txt

2.8 -.

-

cmd>file .

1

$ date >f30.txt; cat f30.txt

11 22:10:14 MSK 2019

cmd>> file

2

$ date >>f30.txt; cat f30.txt

11 22:10:14 MSK 2019

11 22:11:45 MSK 2019

cmd
.

3

$ cat
11 22:10:14 MSK 2019

11 22:11:45 MSK 2019

4 .

.

$ cat <<<"Privet"

Privet

5

cmd <>file ,

.

$ date <> f30.txt; cat f30.txt

11 21:58:17 MSK 2019

11 17:15:49 MSK 2019

cmd >| file

.

5 , .

$ date

12 2021 08:02:24 MSK

$ cat >f30.txt

Hello

$ date >| f30.txt

$ cat f30.txt

12 2021 08:03:13 MSK

2.9 - .

, .

stdin 0.

stdout 1.

stderr 2. stdin .

stdout . .



# sleep 1000 &

[2] 5021

# cd /proc/5021/fd ; ls

0 1 2

cmd >&n

n.

1 # 1 .

$ date >&1

11 22:05:51 MSK 2019

cmd >&

$ date >&-

date: : .

cmd<&n n.

$ cat >file1<&0

privet

$ cat file1

privet

cmdm<&n m

n.

$ cat >file1 2<&0

privet 4 #

$ cat file1

privet 4

cmd<& .

$ pwd<&-

/home/max1

$

cmd<&n n , , .

cmd>&n- n , , .



$ cat f2.sh

#!/bin/sh

read str <&0

echo "$str" |festival tts language russian



$ sh f2.sh

. Enter



2

$ cat f5.txt

Hello my friend

$ read str &1-

Hello my friend

exec .

exec 0

root myfile .

# cat >myfile

pwd; date

.

# exec 0
# pwd; date

/root

exec 1

cat myscript1.sh

#!/bin/sh

exec 1>outfile

0echo "This a test"

$ cat ./outfile

This is a test

exec 3

$ cat myscript3.sh

#!/bin/sh

exec 3> myfile

echo "Privet" >&3

cat ./myfile

$sh myscript.sh

Privet

exec c 0-9.

2.10 -.



cmd 2>file 1

$ ls -l /root/ 2>ls_er; cat ls_er

ls: '/root/': .



.

cmd >file 2>&1 2

$ ls -l f1.txt; ls -l /root/ 2>&1 >ls1

rw-rw-r 1 max1 max1 6 9 07:21 f1.txt

ls: '/root/': .

$ cat ls1

ls: '/root/': .





cmd&>> file 3

$ ls -l f1.txt; ls -l /root/ &>> ls2

rw-rw-r 1 max1 max1 6 9 07:21 f1.txt

$ ls -l f1.txt; ls -l /root/ &>> ls2

rw-rw-r 1 max1 max1 6 9 07:21 f1.txt

max1@hp:~$ cat ls2

ls: '/root/': .

ls: '/root/': .

file1,

file2



, .

md 2 >&1 |tee cmd |& tee

4

$ pwd; ls -l /root/ 2>&1 |tee ls3

/home/max1

ls: '/root/':

.

$ cat ls3

ls: '/root/':

.

2.11 .



.

. .

$ exec 4>file;echo "OK">&4; cat ./file

OK

max@hp:/dev/fd$ ls

0 1 2 255 4

max@hp:/dev/fd$ cat 4

OK

9

$ mv f1.txt f1

$ echo f1 {f1fd}>xyz

f1

$ echo $f1fd

11

$ cd /dev/fd

max@hp:/dev/fd$ ls

0 1 11 2 255 4

max@hp:/dev/fd$ echo "Privet">&11

max@hp:/dev/fd$ cat 11

Privet , .

2.12 .

/dev/stdin 0

/dev/stdout 1

/dev/stderr 2

/dev/fd/

/dev/tcp// /dev/udp//

Bash , -.

~/$ find -print >filelist 2>no_access

filelist, no_access



~/$ cat filelist

.

./Posix1.doc

./script

./script/sc01.sh

./no_access #

./rus2.doc

./filelist #

./otchet.doc

3..

,

.

(){ -

} [ ]

. . . ; . "return [n]", () "n" .

,

. function, ()

privet.

$ if [ "$USER"=max ]; then

> privet ( ) {

> echo "Privet Max";}

> fi



$ privet



Privet Max

, .

.

fatal - .

2

c fatal.

$ cat >func1.sh

#!/bin/sh

fatal () {

echo "$0: fatal error:" "$@" >&2

exit 1

}

if [ $# = 0 ]

then

fatal not enough arguments

fi



$ sh func1.sh

func1.sh: fatal error: not enough arguments

3

$ cat >myscript.sh

#!/bin/bash

function myfunc {

read -p "Enter a value: " value

echo "adding value"

return $(( $value + 10 ))

}

myfunc

echo "The new value is $?"



$ ./myscript.sh

bash: ./myscript.sh:

$ chmod +x myscript.sh

$ ./myscript.sh

Enter a value: 10

adding value

The new value is 20

4

$ cat run.sh

doSam () {

echo "magic"

return 0

}

if doSam;then

echo "Its true"

fi

$ sh run.sh

magic

Its true

return 0 true,

return 1

false.

4..

- ,

.

.

4.1 .

= .



.

$ firstname=Max lastname=Corn

$ echo $firstname; echo $lastname

Max

Corn

declare -i ,

$ i=3+5 ;echo $i

3+5

$ declare -i jj; jj=5+3; echo $jj

8

4.2 .

,.

$ a=123; echo $a;

123

$ echo {$a}

{123}

$ echo {\$a};

{$a}

echo {'$'$a}

{$123}

${}

.

$ a=(0 1 2 )

$ echo ${a[1]}

1

${ :-}

, ,

.

$ b=5

$ echo ${b:-10}

5

max@hp:~$ echo ${c:-10}

10

${ :=}

, ,

max@hp:~$ echo ${USER:=max2}

max

max@hp:~$ echo ${USER1:=max2}

max2

${ :?}



, .

$ echo ${c:?125}

bash: c: 125

${ :+}

,

.

$ c=file1.txt

$ echo ${c:+filen.txt}

filen.txt

$ echo ${d:+filen.txt}

$

${#}

.

$ echo $c

file1.txt

$ echo ${#c}

9

$ ${#*},${#@} .

${ #}



, . .

c=file1.txt

1.txt

${##}



$ echo ${c##file}

1.txt

${ ##}

, .

${ %}

${ %%}

$ echo ${c%.txt}

file1

max@hp:~$ echo ${c%%txt}

file1.

${ //}

$ data=`date`

$ echo ${data}

13 10:56:05 MSK 2019

$ echo ${data/}

13 10:56:05 MSK 2019

${ ///}

$ echo ${data// / }

13 10:56:05 MSK 2019

${ /#/}

${ /%/}

max@hp:~$ greeting="hello friend"

$ declare -n message=greeting

$ echo message

message

$ echo $message

hello friend

$ message="by now"

$ echo $greeting

by now

$ {@P} .

$ echo ${c@P}

file1.txt

$

$ {@Q} .

$ c=file1.txt

$ echo ${c@Q}

'file1.txt'

${! }

, .

4.3 .

- .



declare -n

1

$ greeting=privet

$ echo $greeting

privet

$ declare -n message=greeting

$ echo $message

privet

2

.

$ message=otvet

$ echo $greeting

otvet

3

$ text=ok

$ echo $(!text)

echo $(text=ok)

4.4 , .

.

$# .

$-

, .

$? ,

.

$$ , .

$! ,

, .

$0 , .

$n O , 9 ${n}

$*,$@ ($1,$2..)

1

$ cat >param.sh

#!/bin/sh

echo "$#"

echo "$0"

echo "$?"

echo "$$"

echo "$@"

echo "$*"

exit 0

a b c d

$ sh param.sh a b c d

4

param.sh

0

2698

a b c d

a b c d

4.5 .

$_ , .

$ ls -l f2.txt

rw-rw-rw- 1 max1 max1 6 24 12:57 f2.txt

$ echo $_

f2.txt

BASH

$ echo $BASH

/usr/bin/bash

BASHOPTS

.

$ echo $BASHOPTS Checkwinsize:cmdhist:complete_fullquote:

expand_aliases:extglob:extquote:force_fignore:

globasciiranges:histappend:interactive_comments:

progcomp:promptvars:sourcepath

BASHPID .

$ echo $BASHPID

3321



$ $$

3321:

BASH_COMMAND ,

.



MACHTYPE

$ echo $MACHTYPE

x86_64-pc-linux-gnu

UID

m1@hp:~$ echo $UID

1000

root@hp:~# echo $UID

0

EUID .

$ echo $EUID

1000

GROUPS , .

$ echo $GROUPS

1000

HISTCMD

$ echo $HISTCMD

2021

HOSTNAME ( ).

max1@hp:~$ echo $HOSTNAME

hp

SECONDS[=n] , , n , n .

$ echo $SECONDS

9606

HOSTTYPE ,

c

$ echo $HOSTTYPE

x86_64





$ echo $USER;echo $HOME;echo $LOGNAME

max

/home/max

max

$echo $DESKTOP_SESSION;

$echo$DISPLAY;echo $TERM

mate

:0

xterm

$ echo $SHELL;echo $PWD

/bin/bash

/home/max

$ echo $PATH

/home/max/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

$ echo $SHELL;echo $PWD

/bin/bash

/home/max

$ echo $SHELL;echo $PWD

/bin/bash

/home/max

$ echo $RANDOM

18264

$ echo $SECONDS

430

$ echo $HISTCMD

2003

$ echo $HOSTNAME

hp

4.6 .



.

.bash_profile ,

.profile.

BASH_COMPAT , , .

BASH_ENV , , .

BASH_LOADABLES_PATH , , enable.

BASH_XTRACEFD=n , BASH , set -x.

CDPATH= cd.

$ echo $CDPATH + echo

CHILD_MAX=n

,

.

$ CHILD_MAX=4096

+ CHILD_MAX=4096

$ echo $CHILD_MAX

+ echo 4096

4096

COLUMNS=n , select.

$ COLUMNS=60

+ COLUMNS=60

$ echo $COLUMNS

+ echo 60

60

EMACS t Bash , EMACS.

ENV= , POSIX/

EXECIGNORE= . , .

FCEDIT= , fc.

FIGNORE= .

, ,



readline.

GLOBIGNORE=_.

,

, .

HISTCONTROL=.

, .

HISTFILE=. .

~/.bash_history

HISTFILESIZE=n , . 500.

HISTIGNORE=

,

.

.

HISTSIZE=n ,

. 500.

HISTTIMEFORMAT= ,





history.

HCME= ,

login /etc/passwd.

HOSTFILE= .

IFS= .

IGNOREEOF=n , , . . 10.

INPUTRC= readline.

~/.inputrc

LANG=_ .

LINES=n . select. MAIL=

.

login.

MAILCHECK=n .

60 ( ).

MAILPATH=. .

OPTERR=n 1( ) getopts.

PATH=_ .

POSIXLY_CORRECT= , POSIX.

PROMT_COMMAND= , .

PROMT_DIRTRIM=n , \w \W.

PS0= ,

P$1=

echo $PS1

\[\e]0;\u@\h:\w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$S1= .

PS2= . > +

$ echo $PS2

>

PS3= select

#?

$ PS3="Select the item number:"

$ echo $PS3

Select the item number:

PS4= C ( bash -x set -x) +

SHELL= , .

TERM=

TIMEFORMAT= time.

TMOUT=n , .

TMPDIR= .

auto_resume= .

histchars= . , ,

- . !^#.



$ echo $HISTFILE

/home/max/.bash_history

, .

max@hp:~$ echo $HISTSIZE

1000



max@hp:~$ echo $HOME

/home/max



$ echo $LANG

ru_RU.UTF-8



$ echo $PATH

/home/max/.local/bin:/home/max/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

, .

$ echo $SHELL

/bin/bash



$ echo $TERM

xterm

.

5. .

5.1 .



. .



.

$ a=(0 1 2 3 4 5 6 7 8 )

$ echo ${a[4]}

4

$ echo ${a[-2]}

7

${..}



$ car=(porsh bmv mers)

$ echo ${car[0]}

porsh

$ echo ${car[*]}

porsh bmv mers

5.2 .



4

$ echo ${a[-2]}

7

${..}



$ car=(porsh bmv mers)

$ echo ${car[0]}

porsh

$ echo ${car[*]}

porsh bmv mers

5.2 .

.

${[i]} i



${[@]}

${#[*]}

,

$ a=(0 1 2 3 4 5 )

$ echo ${a[4]}

4

$ echo ${a[*]}

0 1 2 3 4 5

$ echo ${a[@]}

0 1 2 3 4 5

$ echo ${#a[*]}

6

$ echo ${#a[@]}

6

5.3 .

. declare -A, local -A, readonly -A

a .



$ declare -A avto=([bmv]=10 [porsh]=20 [mers]=30)



$ echo ${avto[*]}

20 30 10

$ echo ${avto[bmv]}

10

$ local -A avto=([bmv])=10 [mers]=30

bash: local: .


6. .

PS1,PS2,PS3,PS4 , .

\a

\A

\d

\D ()

\e

\h

\H

\j

\l

\n

\r

\s

\t 24

\T 12

\u

\v Bash

\V Bash

\w

\!

\#

\$ 0 # $

\@ 12

\nnn

\\

\[

\]

PS1 .

PS2 (> , +).

PS3 ( select).

PS4 4- ,



$ echo $PS1

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

u@\h @\

w - ($HOME ~ ).

u@\h:\w\$=max1@hp:~$

$ echo $PS2

>

$ PS3="Select the item number:"

$ echo $PS3

Select the item number:

7 .

++ .

+

!~

**

* / % , ,

+

< < > >

< <+ > >=

== != : ,

&

^

|

&& ()

?:

= += -=

*= /= %=

<<= >>=

&= ^= |=



max@hp:~$ echo $((2 + 2 )) #

4

max@hp:~$ echo $((2 2 )) #

0

max@hp:~$ echo $((2 ** 2 )) #

4

$ echo $((2 * 2 )) #

4

$ echo $((2 / 2 )) #

1

$ echo $(( 2==2 )) # (1 -)

1

$ echo $(( 2 != 2 )) # (0-)

0

max@hp:~$ echo $(( 2 <= 3 )) #

1

max@hp:~$ echo $(( 2 >= 3 )) #

0

$ let "count=0" "i = i + 1"

$ echo $i

2

$ echo $count

0

8 .

8.1 .



set -o vi set -o emacs vi esc.




.


.

, (https://www.litres.ru/pages/biblio_book/?art=67244430) .

Visa, MasterCard, Maestro, , , , PayPal, WebMoney, ., QIWI , .



Данная книга является продолжением книги Справочное пособие по Linux. В данной книге дается как развернутая, так и краткая сводка команд, встроенных в оболочку Bash. Рассматриваются встроенные команды, переменные, функции, массивы. Применение команд с параметрами и аргументами рассматривается на многочисленных примерах. Книга адресована тем, кто хочет повысить свой профессиональный уровень знания Linux и заинтересован в автоматизации задач через командную строку путем написании собственных скриптов.

Как скачать книгу - "BASH. Справочное пособие" в fb2, ePub, txt и других форматах?

  1. Нажмите на кнопку "полная версия" справа от обложки книги на версии сайта для ПК или под обложкой на мобюильной версии сайта
    Полная версия книги
  2. Купите книгу на литресе по кнопке со скриншота
    Пример кнопки для покупки книги
    Если книга "BASH. Справочное пособие" доступна в бесплатно то будет вот такая кнопка
    Пример кнопки, если книга бесплатная
  3. Выполните вход в личный кабинет на сайте ЛитРес с вашим логином и паролем.
  4. В правом верхнем углу сайта нажмите «Мои книги» и перейдите в подраздел «Мои».
  5. Нажмите на обложку книги -"BASH. Справочное пособие", чтобы скачать книгу для телефона или на ПК.
    Аудиокнига - «BASH. Справочное пособие»
  6. В разделе «Скачать в виде файла» нажмите на нужный вам формат файла:

    Для чтения на телефоне подойдут следующие форматы (при клике на формат вы можете сразу скачать бесплатно фрагмент книги "BASH. Справочное пособие" для ознакомления):

    • FB2 - Для телефонов, планшетов на Android, электронных книг (кроме Kindle) и других программ
    • EPUB - подходит для устройств на ios (iPhone, iPad, Mac) и большинства приложений для чтения

    Для чтения на компьютере подходят форматы:

    • TXT - можно открыть на любом компьютере в текстовом редакторе
    • RTF - также можно открыть на любом ПК
    • A4 PDF - открывается в программе Adobe Reader

    Другие форматы:

    • MOBI - подходит для электронных книг Kindle и Android-приложений
    • IOS.EPUB - идеально подойдет для iPhone и iPad
    • A6 PDF - оптимизирован и подойдет для смартфонов
    • FB3 - более развитый формат FB2

  7. Сохраните файл на свой компьютер или телефоне.

Последние отзывы
Оставьте отзыв к любой книге и его увидят десятки тысяч людей!
  • константин александрович обрезанов:
    3★
    21.08.2023
  • константин александрович обрезанов:
    3.1★
    11.08.2023
  • Добавить комментарий

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