一、shell脚本概述
shell是一个特殊的应用程序,介于操作系统和用户之间。扮演的是命令解释器的角色,用户输入操作指令,shell解释,传递个内核,内核执行完成,shell返回给用户一个执行结果。
centos7默认的shell是/bin/bash。
cat /etc/shells:查看当前系统的所有shell。
shell脚本叫脚本语言,按行执行,顺序执行,又叫动态语言,是编程语言的一种。用来控制软件应用程序,脚本通常都是以文本的形式保存,只在被调用的时候才进行解释或者编译。
二、shell脚本运行的方式
1.sh first.sh
2.bash first.sh
3.source first.sh
4. ./first.sh :必须给执行权限才能运行。
前三种无需给执行权限,适用于脚本调试阶段,可以不赋权执行。
脚本一旦正式运行,必须要给执行权限运行。
三、编写脚本规范
1.使用vim文本编辑器
2.编写时,每条linux命令按照执行顺序依次编写(每条命令独占一行)
四、重定向操作
1.重定向输入 <:从指定的文件读取数据,而不是从键盘输入。
例:
2.重定向输出<:将输出的结果保存到指定的文件(覆盖原内容)
例:
3.重定向输出>>:将输出的结果追加到指定的文件尾部。(不覆盖原内容)
例:
面试题:怎样不删除文件,清空文件的内容。/dev/null:“黑洞”文件
答案:cat /dev/null > passwd.txt
4.混合输出&>:将标准输出,标准错误的内容保存到同一个文件中,(原内容会被覆盖)
5.管道符操作符号“|”
将左侧的命令输出结果,作为右侧命令的处理对象。(主要处理对文本的命令)
五、Shell脚本变量
1.Shell变量的作用
1.用来存放系统和用户需要使用的特定参数(值)
2.变量名:使用固定的名称,由系统预设或用户定义
3.变量值:能够根据用户设置、系统环境的变化而变化
2.变量名的规范
1.不要使用系统命令作为变量名。
2.不要使用中文,
3.不要试特殊符号开头,可以是用_下划线开头。
4.要用注释。
3、变量类型
1.自定义变量:用户自己定义的变量
2.特殊变量:环境变量,只读变量,位置变量,预定义变量
3.环境变量:系统自带,用于设置工作环境,配置系统行为,传递信息,控制程序的执行。这些环境变量,多有用户都可以使用,都可见。
由系统提前创建,
$USER:表示用户名称。
$HOME:表示用户的宿主目录
$LANG:表示语言和字符集
$PWD:表示当前所在工作
$PATH:表示可执行用户程的默认路径
4.只读变量:只可以读取不能修改的变量,(不可以被删除,重启即消失)
例:把a设置成只读变量readonly a,对a进行修改,出现无法修改或者删除,重启就会消失。
5.强引用和弱引用
在赋值变量时,单引号和双引号无区别。
打印变量时,如果时双引号是弱引用,还是变量原本的值。
单引号:强引用,就不再是原来的变量的值,变成字符串。
6.查看变量值
查看变量的值
格式:echo $变量名
echo $produc
echo $product $version
echo
p
r
o
d
u
c
t
407.
位置变量位置变量又叫命令行参数,运行脚本或程序时,传递给他们的值,主要用于外部数据传递给脚本执行,命令形式为:
{product}40 7.位置变量 位置变量又叫命令行参数,运行脚本或程序时,传递给他们的值,主要用于外部数据传递给脚本执行, 命令形式为:
product407.位置变量位置变量又叫命令行参数,运行脚本或程序时,传递给他们的值,主要用于外部数据传递给脚本执行,命令形式为:n,传参的顺序时从左到右,传参范围为
1
−
9
,如果是
10
则表示形式:
1-9,如果是10则表示形式:
1−9,如果是10则表示形式:{10}。
$0:表示命令本身。
8.预定义变量
通常是便程序语言或者脚本解释器提供的,根据需要自动设置和更新,不能修改。
∗
,
*,
∗,@。
加了双引号的
∗
,会把内容处理在一行。
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
60
b
c
723851664092
b
c
c
16520
d
833
c
a
1
b
.
p
n
g
)
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
5064
c
77
c
5
c
934
f
4
d
88
d
b
10
c
6
e
c
a
f
681
d
.
p
n
g
)
加了双引号的
*,会把内容处理在一行。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/60bc723851664092bcc16520d833ca1b.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/5064c77c5c934f4d88db10c6ecaf681d.png) 加了双引号的
∗,会把内容处理在一行。![在这里插入图片描述](https://img−blog.csdnimg.cn/60bc723851664092bcc16520d833ca1b.png)![在这里插入图片描述](https://img−blog.csdnimg.cn/5064c77c5c934f4d88db10c6ecaf681d.png)加了双引号的@,会把内容分行处理。
不加引号的
∗
,
也会把内容分行处理。
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
e
c
c
34
a
551
f
c
14
e
e
6
b
e
e
7005
a
1286
c
f
e
3.
p
n
g
)
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
c
f
b
5
f
7
a
71703476
f
b
65
b
3
e
f
e
0
c
5
e
568
a
.
p
n
g
)
不加引号的
*,也会把内容分行处理。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/ecc34a551fc14ee6bee7005a1286cfe3.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/cfb5f7a71703476fb65b3efe0c5e568a.png) 不加引号的
∗,也会把内容分行处理。![在这里插入图片描述](https://img−blog.csdnimg.cn/ecc34a551fc14ee6bee7005a1286cfe3.png)![在这里插入图片描述](https://img−blog.csdnimg.cn/cfb5f7a71703476fb65b3efe0c5e568a.png)不加引号的和$@,都会把内容处理在一行,表现形式一致。
?
:判断上一条命令是否执行成功,成功返回
0
,所有的非零返回值都是失败。
!
[
在这里插入图片描述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
852
c
b
5
c
7
f
1724
e
08
a
1
f
f
a
00
b
033
b
221
f
.
p
n
g
)
9.
全局变量所有的用户自定义变量在所有的子
s
h
e
l
l
环境中都可以使用。优点:全局范围,持久性,共享性。副作用:如果相同的变量名,直接引用全局变量,会导致不确定性。在脚本中一般使用的自定义变量。
e
x
p
r
1
+
2
(
数字与运算符直接有空格)
e
x
p
r
2
−
1
e
x
p
r
2
∗
2
乘法:
c
=
?:判断上一条命令是否执行成功,成功返回0,所有的非零返回值都是失败。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/852cb5c7f1724e08a1ffa00b033b221f.png) 9.全局变量 所有的用户自定义变量在所有的子shell环境中都可以使用。 优点:全局范围,持久性,共享性。 副作用: 如果相同的变量名,直接引用全局变量,会导致不确定性。 在脚本中一般使用的自定义变量。 expr 1 + 2 (数字与运算符直接有空格) expr 2 - 1 expr 2 * 2 乘法:c=
?:判断上一条命令是否执行成功,成功返回0,所有的非零返回值都是失败。![在这里插入图片描述](https://img−blog.csdnimg.cn/852cb5c7f1724e08a1ffa00b033b221f.png)9.全局变量所有的用户自定义变量在所有的子shell环境中都可以使用。优点:全局范围,持久性,共享性。副作用:如果相同的变量名,直接引用全局变量,会导致不确定性。在脚本中一般使用的自定义变量。expr1+2(数字与运算符直接有空格)expr2−1expr2∗2乘法:c=[ 2 * 5],或者let c=125
expr 2 / 2
取余:5 % 2
整数运算表达式:
特殊的形式:
i++:每次加1,再赋值,
例:for i=1;i<=10;i++,先赋值再加1。
(1 1+1 2 2+1 3 3+1…)
i–:先赋值,再减一。
++i:先加,再赋值。
–i:先减,再赋值。
bc计算器:支持整数运算,和浮点运算(浮点即小数点运算)
例:echo 4 * 2 | bc 或者 echo 4.2 * 2.2 | bc
自带环境变量:例 echo "scale =3; 4.2*2.2 | bc (保留小数点后三位)
scale:shell内部自带全局变量,自定义小数点的后几位。