0%

关键字变量

就是bash内部预设值的一些变量。这些变量的变量名都是大写。

1
2
3
4
5
6
7
8
9
10
# man bash | grep -A311 'The following variables are set by the shell'
The following variables are set by the shell:

BASH Expands to the full file name used to invoke this instance of bash.
BASHOPTS
A colon-separated list of enabled shell options. Each word in the list is a valid argument for the -s option to the shopt builtin
command (see SHELL BUILTIN COMMANDS below). The options appearing in BASHOPTS are those reported as on by shopt. If this variable
is in the environment when bash starts up, each shell option in the list will be enabled before reading any startup files. This
variable is read-only.
................
Read more »

递归函数

递归函数,简单说就是函数调用自己。

复习简单函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@vm-101 ~]# cat r.sh
#!/bin/bash

function plus(){
sum=0

for ((i=$1; i>0; i--))
do
sum=$[ $sum + $i ]
done

return 0
}


plus $1

echo "sum : $sum"

exit 0


[root@vm-101 ~]# bash r.sh 100
sum : 5050
Read more »

结构控制

Bash中结构控制关键字有:if for while util cast select

if

1
2
3
4
5
6
[root@vm-101 ~]# if [ 111 -eq 111 ]; then					# 如果111 -eq 111(-eq等于)
> echo 'yes' # 上面的表达式返回真时,打印yes
> else # 否则的意思
> echo 'no' # 上面的表达式返回假时,打印no
> fi # 一定要记得这个结束符
yes # 111 -eq 111,返回真,所以打印yes
Read more »

信号处理

在linux中,一共有以下信号:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@vm-101 ~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX

[root@vm-101 ~]# trap -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Read more »

高级设置-set

set是bash的内建命令。它的作用是设置bash的一些特性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[root@vm-101 ~]# compgen -b | grep set
set
typeset
unset
[root@vm-101 ~]# set -o
allexport off
braceexpand on
emacs on
errexit off
errtrace off
functrace off
hashall on
histexpand on
history on
ignoreeof off
interactive-comments on
keyword off
monitor on
noclobber off
noexec off
noglob off
nolog off
notify off
nounset off
onecmd off
physical off
pipefail off
posix off
privileged off
verbose off
vi off
xtrace off
Read more »

作用域

在bash中,变量都是全局的。也就是说,在脚本中定义的变量,可以在任何地方调用,包括函数。

先定义,后调用。注意先后关系。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@vm-101 ~]# cat varible.sh
#!/bin/bash

# 注释说明,好习惯

var1="aaaa"

func1(){
var2="bbbb"
echo $var1

return 0
}

echo "1: $var2"
func1
echo "2: $var2"

exit 0



[root@vm-101 ~]# bash varible.sh
1:
aaaa
2: bbbb
Read more »

练习4-杨辉三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
[root@vm-101 ~]# cat yanghuisanjiao.sh
#!/bin/bash

# 注释说明,好习惯

read -p "输入杨辉三角的大小:" size

list=(0 1) # 临时存放上一行的状态,第一行没有上一行。给一个初始状态。

for ((i=1; i<=$size; i++))
do
for ((a=$[ $size - $i ]; a>0; a--)) # 打印前面的空格
do
echo -n " "
done

list_tmp=(0) # 记录当前行的计算过程。每次新的循环要清空。

for ((b=1; b<${#list[@]}; b++)) # 打印后面的数字
do
var=$[ ${list[$[b-1]]} + ${list[b]} ]
echo -n " $var"
list_tmp=(${list_tmp[@]} $var)
done
list=(${list_tmp[@]} 0) # 这一行计算结束了,把这行的结果存到list。供下次循环使用。
echo
done

exit 0

[root@vm-101 ~]# bash yanghuisanjiao.sh
输入杨辉三角的大小:5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
[root@vm-101 ~]# bash yanghuisanjiao.sh
输入杨辉三角的大小:7
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1

练习3-打印等腰三角

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@vm-101 ~]# cat dengyaosanjiao.sh
#!/bin/bash

# 注释说明,好习惯

size=5

for ((i=1; i<=$size; i++))
do
for ((a=$[ $size - $i ]; a>0; a--)) # 先算出并打印出每行前面的空格
do
echo -n " "
done

for ((b=$[ 2 * $i - 1 ]; b>0; b--)) # 再算出每行要打印的#号
do
echo -n "#"
done
echo # 行尾补一个换行符
done

exit 0

[root@vm-101 ~]# bash dengyaosanjiao.sh
#
###
#####
#######
#########
Read more »

练习2-从1加到100

for循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@vm-101 ~]# cat lianxi1-100.sh
#!/bin/bash

# 注释说明,好习惯

for (( i=1; i<=100; i++))
do
sum=$[ $sum + $i ]
done

echo $sum

exit 0

[root@vm-101 ~]# bash lianxi1-100.sh
5050
Read more »