Книга - BASH. Справочное пособие
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
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/
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 , .
- Жанр: Компьютерная справочная литература
- Теги: Самиздат, справочная информация
- Язык: Книги на русском языке
- Объём: 90 стр.
- Дата написания: 2022
- Возрастные ограничения: 16+
- Дата выхода книги: 24 февраля 2022
- Версия: 📚 Электронная книга
Данная книга является продолжением книги Справочное пособие по Linux. В данной книге дается как развернутая, так и краткая сводка команд, встроенных в оболочку Bash. Рассматриваются встроенные команды, переменные, функции, массивы. Применение команд с параметрами и аргументами рассматривается на многочисленных примерах. Книга адресована тем, кто хочет повысить свой профессиональный уровень знания Linux и заинтересован в автоматизации задач через командную строку путем написании собственных скриптов.
Как скачать книгу - "BASH. Справочное пособие" в fb2, ePub, txt и других форматах?
- Нажмите на кнопку "полная версия" справа от обложки книги на версии сайта для ПК или под обложкой на мобюильной версии сайта
Полная версия книги
- Купите книгу на литресе по кнопке со скриншота
Если книга "BASH. Справочное пособие" доступна в бесплатно то будет вот такая кнопка - Выполните вход в личный кабинет на сайте ЛитРес с вашим логином и паролем.
- В правом верхнем углу сайта нажмите «Мои книги» и перейдите в подраздел «Мои».
- Нажмите на обложку книги -"BASH. Справочное пособие", чтобы скачать книгу для телефона или на ПК.
В разделе «Скачать в виде файла» нажмите на нужный вам формат файла:
Для чтения на телефоне подойдут следующие форматы (при клике на формат вы можете сразу скачать бесплатно фрагмент книги "BASH. Справочное пособие" для ознакомления):
- FB2 - Для телефонов, планшетов на Android, электронных книг (кроме Kindle) и других программ
- EPUB - подходит для устройств на ios (iPhone, iPad, Mac) и большинства приложений для чтения
Для чтения на компьютере подходят форматы:
- TXT - можно открыть на любом компьютере в текстовом редакторе
- RTF - также можно открыть на любом ПК
- A4 PDF - открывается в программе Adobe Reader
Другие форматы:
- Сохраните файл на свой компьютер или телефоне.