shell脚本
脚本就是可运行的代码的集合,脚本语言(计算机语言)脚本的特点:从上到下,按行执行。
python 脚本语言 格式更严谨 严格的执行缩进。也是从上到下按行执行。
shell脚本就是再shell环境(/bin/bash)bash就是shell的解释器。linux环境下的编程语句。
自动化运维,可重复执行的,自动化的在系统中实现增删改查的操作。
shell的解释器,默认就是bash
sh :已经淘汰
bash :sh的扩展板
csh :类似c语言
tcsh :整合了c语言的shell
nologin :用户无法登录到系统的shell
shell的作用:
1、自动化运维
2、批量化的重复操作以及配合定时任务执行。
3、有了脚本就可以减轻管理员的工作量
4、避免配置出错。
5、提高处理批量文件的速度
shell脚本的构成
第一行:声明解释器(默认就是bash,可以不写)
注释:以#开头,就是注释的信息,注释的部分不会被执行。
可执行语句:linux的命令都可以作为可执行语句,一行一行的往下写。一行就是一个了执行的语句。
shell的执行方式
三种执行方式:
第一种:非赋权执行,不给脚本执行权限的执行方式:
(调试)sh :就是在当前的shell环境里生成一个子shell,运行结果不改变父shell的环境。
source :点命令"." 他会改变当前shell的环境,也就是真正的执行代码。
(调试) bash :就是在当前的shell环境里生成一个子shell,运行结果不改变父shell的环境。
只是在子shell里面展示出来,并没有真正的运行
运行一个脚本之前先调试,调试就会用到sh bash 调试的目的就是来证明这个脚本是否能够正常运行
正真运行脚本是source(点命令)
第二种:
脚本调试完毕,都是赋权执行。赋予他执行权限
和sh bash不同,他也是被真正执行了
在当前目录用./ 在非当前目录中就要用到绝对路径
重定向操作
正常执行是标准输入
有标准输入就有标准输出
标准错误输出(报错)
重定向的类型:
重定向输出:> >> > 标准输出的结果保存到指定的文件,而且会覆盖文件原有的内容。
这是标准输出的结果 ,错误的输出则不会被保存。
">>" 标准输出的结果保存到文件,原有的内容尾部追加内容,不会覆盖原有的内容。
2 > 标准错误的输出结果,保存到指定的文件。
2>>标准错误的输出结果,原有的内容尾部追加内容,不会覆盖原有的内容。
&> &>> 混合输出,既可以保存标准输出,也可以保存标准错误输出。
重定向输入: < 从指定的文件获取数据。
变量的作用和类型,如何声明变量
变量的作用:用来存放系统和用户需要使用的设定的参数(值),变量保存在内存中。调用的时候,直接到内存当中查找变量所在的内存地址。
变量的类型:
自定义变量 名称由用户自己自定义 值也可以自定义。
变量名的规范:
1、不要使用系统的命令作为变量名
2、不要使用中文
3、不要使用特殊符号开头,可以用下划线开头,不要使用数字开头。
4、变量名我们一般会使用对应的英文名称来使用,computer stu mumber num
5、变量名要保持前后一致,要有注释,提高代码的可读性。
变量值: int 整数 string 字符串 (如果声明字符串要用双引号) 浮点 0.12 布尔 true false
int a=12
运算的结果
双引号,单引号,反撇号之间的作用和区别:
弱引用和强引用
双引号就是弱引用,变量值就是变量值本身
单引号就是强引用,变量值不在是本身定义的值,保持自身的字符串形式
`` 反撇号,命令替换,把命令的执行结果传给变量,作为变量的值,先执行命令,再给变量赋值。
自定义输入变量值
如何自定义输入变量的值
read -p “提示信息”(必须要有双引号)
-p 指定提示符 ,提示符的内容包含在双引号中间,双引号之间的内容可以不写,但是双引号必须要有
还有另外一种方式在命令行里面进行运算
先删除上面两行,保留结果显示
全局变量 对整个系统生效,所有用户都可以使用
全局生效,每个脚本的变量值,都是固定的。
持久性
共享性
全局变量适用于不需要经常更改的值。
进入文本编辑器
然后再source一下让他生效。
我们再打开另外一个窗口
管理员和普通用户都能进行这个运算。
排错的方法:bash -x +脚本名
会把每一步都打印出来,这样方便定位哪一步有问题。
环境变量 环境变量是系统创建的,用来设置的用户的工作环境。
环境变量可以理解为特殊的全局变量,/etc/profile配置文件。
echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
可执行的命令,或者可执行的程序的默认路径。
位置变量 又叫做命令行参数,是在脚本的外面给脚本内部传值。
$1 $2 $3 $4 .....$9
从第一个到第九个
10以后要用{}把数字括起来
${10} ${11}
预定义变量 编程语言和解释器提供的,用户无法更改。只能由系统自行更新和设备。
$* 和$@ :表示命令或者脚本需要处理的参数,二者的区别在于处理方式的不同。
$* 和$@不加引号的表现一致,都是把参数一个一个处理。
$*加了引号,会把参数当成一个整体来进行处理。
$#也是一个全局变量,统计传递给脚本或者函数的参数个数。
$? true false 命令执行之后返回的状态码
只有0表示成功
所有非0都表示失败
返回上一次执行的命令的状态码。
如果不加引号会是什么样子的
不加引号会把你的参数单个单个的处理。
换成$@会是什么样子的
小数运算:bc是一个简易的系统自带的计算机程序,可以执行整数,也可以计算小数。
还有另外一种在命令行里面运算
但是这个不能在文本编辑器里面进行操作
i++ 先赋值,再加1
i=$(($i+1))
i=1 i+1=2
i=2 2+1=3
++i先加再赋值
1+0=1 i+1
1+1=2 i=2
i--先赋值,再减1
--i 先减再赋值