*bash:*
bash 是一个为GNU计划编写的Unix shell,是许多Linux发行版的默认Shell
shell:
当命令或程序语句不在交互式命令行下执行,而是通过一个程序文件来执行时,该程序就可以被称为脚本,
在shell脚本中写入命令、变量、语句、及流程控制语句,然后将这些命令一次性执行完毕,这种批量执行命令的方式被称为非交互式的方式。
shell在生产环境中常被用于:
软件一键自动化安装、优化,监控报警、软件启动、日志分析等。
由于shell与linux关系密切,因此更加适合通过shell脚本语言来帮助用户实现轻松、高效的运维任务。
PHP语言的优势在于小型网站系统的开发;Python语言的优势在于开发较复杂的运维工具软件、Web界面的管理工具和Web业务的开发。云计算的Openstack由Python语言开发,批量管理软件SaltStack也是由Python开发。
1.1执行.sh脚本的方法
# bash test.sh //常用
# sh test.sh
# ./test.sh //需要文件拥有X权限
# . test.sh
# source test.sh
注意:最后两种方式执行脚本时会加载并执行相关脚本文件中的命令及语句,而不是产生一个子shell来执行文件中的命令。其他方式在执行时都会生成一个新的子进程执行。
1.2重定向与管道
重定向:
标准输入(STDIN):默认的设备为键盘,文件编号为0,命令将从标准输入文件中读取在执行过程中需要的输入数据
标准输出(STDOUT):默认的设备为显示器,文件编号为1,命令将执行后的输出结果发送到标准输出文件
标准错误(STDERR):默认的设备是显示器,文件编号为2,命令将执行期间的各种错误信息发送到标准错误文件
在实际操作中,可以改变输入、输出内容的方向,而不是使用默认的标准输入输出的设备(键盘、显示器),这种操作称为“重定向”
重定向输出:
> //覆盖文件内容
>> //叠加文件内容
重定向输入:
<
# passwd --stdin zhangsan < pass.txt //pass.txt文件中只需要一行密码
或者
# passwd zhangsan < pass.txt //pass.txt文件中需要两行一样的密码
错误重定向:
将错误信息重新定义到新的文件中
2> //覆盖
2>> //叠加
&>
&>>
变量:
所有的编程语言都利用变量来存放数据,以备后续使用或者修改,和编译型语言不同,大多数脚本语言不要求在创建变量之前声明其变量类型,用到什么类型就是什么类型。在变量名前面加上一个美元符号就可以访问到变量的值,shell定义了一些变量,用于保存用到的配置信息,比如可用的打印机、搜索路径等,这些变量叫作环境变量。
变量名由一系列字母、数字、下划线组成,其中不包括空白字符,常用惯例是在脚本中使用大写字母为环境变量命名,或者使用驼峰命名法和小写字母为其他变量命名
简单地说:变量就是用一个固定的字符串(字母、数字、符号等组合)代替更多、更复杂的内容。在使用这些更多、更复杂内容时,通过简短固定的变量命来代替。
可通过"set"查看当前linux系统中的所有变量
可通过"env"查看当前linux系统中的全局变量
变量类型:
变量分为环境变量(全局变量)和普通变量(局部变量)。
环境变量可以创建在他们的shell及子shell中使用,环境变量又分为自定义变量和bash内置环境变量。
设置变量的作用范围
默认情况下,新定义的变量只能够在当前的shell环境使用,这也叫局部变量,当进入一个新的shell环境后将不能使用局部变量
赋值时使用引号
双引号:允许通过$符号引用其他变量值
单引号:禁止引用其他变量值,$视为普通字符
反撇号:命令替换,提取命令执行后的输出结果
将执行某个命令的屏幕输出结果赋值给变量,并通过命令进行处理
read定义变量
数值变量的整数运算+ - * / %
Bc计算器工具:# echo "5 * 1.7" | bc
二、特殊的shell变量
1.环境变量:env //查看当前工作环境的环境变量;
PATH变量用于设置可执行程序默认搜索路径
2.位置变量:$n:n为自然数。0代表命令本身,1到9代表第1到第9个参数(参数的值是执行该命令时,从1开始依次输入的),10以上的参数要用大括号包含,如${10}
3.预定义变量:
$#:命令行中位置变量的个数c
$*:所有位置变量的内容
$?:上一条命令执行后返回的状态,当返回状态值为0时表示执行正常,非0值表示执行异常或出错
$0:当前执行的进程/程序名/脚本
三、环境变量初始化与对应文件的生效顺序
决于系统运行shell的方式。系统运行shell的方式一般有三种:
① 通过系统用户登录和默认运行的shell。
② 非登录交互式运行shell
③ 执行脚本运行非交互式shell
四、条件测试操作
对特定的条件进行测试,并根据返回值来判断条件是否成立
1.文件测试
-d:测试是否为目录
-e:测试目录或文件是否存在
-f:测试是否为文件
-r:测试当前用户是否有权限读取
-w:测试当前用户是否有权限写入
-x:测试是否设置有可执行权限
当测试条件成立时,接着执行&&后面的内容:
# [ -e /root ] && echo "该路径存在!"
该路径存在!
2.整数值比较
-eq:第一个数等于第二个数
-ne:第一个数不等于第二个数
-gt:第一个数大于第二个数
-lt:第一个数小于第二个数
-le:第一个数小于或等于第二个数
-ge:第一个数大于或等于第二个数
equal //等于
no equal //不等于
greater than //大于
less than //小于
less ro equal //小于等于
greater ro equal //大于等于
e 等于
n 不等于
l 小于
g 大于
3.字符串比较
=:第一个字符串是否与第二个字符串相同
!=:第一个字符串与第二个字符串不相同, ! 表示取反
-z:检查字符串是否为空,对于未定义或赋予空值的变量将视为空串
4.逻辑测试
&&:逻辑与,相当于“而且”只有当前后两个条件都成立,整个测试命令返回值为0,表示成立
||:逻辑或,相当于“或者”只要前后两个条件有一个成立,整个测试命令返回值为0,表示成立
!:逻辑否,表示“不” 只有当前指定的条件不成立时,整个测试命令的返回值才为0