ai.chakc.top
Bash

bash是一种Linux脚本解释器,默认保存1000个历史记录

1
2
3
4
5
6
#查看历史记录
echo $HISTORY
#查看历史记录大小
echo $HISTSIZE
#感叹号+历史id执行历史命令
!12
Bash变量
  • bash变量是弱类型,无需事先声明类型,是将声明和赋值同时进行,bash默认把所有变量都认为是字符串。

  • bash变量有三种命名方法,直接命名,单引号和双引号。变量定义与数值,变量和值之间不能有空格,例如:

1
name=名字

变量的引用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#常规的引用
name="名字"
echo ${name}
>>名字
#正常情况下可以省略花括号
echo $name
>>名字

#特殊的引用
name2='${name}'
echo $name2
>>${name}

name3="${name}"
echo $name3
>>名字

#单引号变量,不识别特殊语法
#双引号变量,能识别特殊符号

变量的作用域:

使用命令pstree能找出当前进程的树状图,能够清晰的反应子父级进程

切换不同的shell定义的变量会丢失

特殊变量:$?

  • 0:成功

  • 1-255:错误码

不同的执行方式,不同的shell环境
  • 每次调用bash/sh解释器执行脚本,都会开启一个子shell,因此不保留当前的shell变量,通过pstree命令检查进程树
  • 调用source,在当前shell环境加载脚本,因此保留变量

1.开启子shell的执行方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#演示

name=o
echo $name
>>o

#新建一个文件make_vars.sh

cat make_vars.sh
>>name="p"

#使用bash解释器执行脚本
bash make_vars.sh
echo $name
>>o

#使用./执行脚本
chmod +x make_vars.sh
./make_vars.sh
echo $name
>>o

2.不开启子shell的执行方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#演示

name=o
echo $name
>>o

#新建一个文件make_vars.sh

cat make_vars.sh
>>name="p"

#使用source,在当前shell环境执行脚本
source make_vars.sh
echo $name
>>p


单引号引用的指令会返还执行结果

1
2
3
4
5
6
7
8
9
#演示
name=ls
echo $name
>>ls

name='ls'
echo $name
>>make.sh

小题目:问,如下输出什么内容

1
2
3
4
5
6
7
8
cat test.sh
>>user1='whoami'
sh test.sh
echo $user1

A.当前用户
B.root
C.空

答案为C