shell编程学习
1.什么是shell?
Shell是一个命令解释器,它在操作系统的最外层,负责直接与用户进行对话,把用户的输入解释给操作系统,并处理各种各样的操作系统的输出结果,输出到屏幕反馈给用户。这种对话方式可是交互也可以是非交互式的,我们所输入的命令计算机是不识别的,这时就需要一种程序来帮助我们进行翻译,变成计算机能识别的二进制程序,同时又把计算机生成的结果返回给我们。
#!/bin/bash 解释器
2.shell种类
2.1shells文件下面各文件含义
常见的 Shell 解释器程序有很多种,使用不同的 Shell 时,其内部指令、命令行提示符等方面会存在一些区别。通过/etc/shells 文件可以了解当前系统所支持的 Shell 脚本种类。
[root@localhost ~]# cat /etc/shells
/bin/sh #是bash命令的软链接 (已经被/bin/bash所替换)
/bin/bash 基准于GNU的框架下发展出的Shell。
/usr/bin/sh 已经被bash所替换。
/usr/bin/bash #centos和redhat系统默认使用bash shell
/bin/tcsh #csh的增强版,与csh完全兼容 整合了csh,提供更多的功能。
/bin/csh #已经被/bin/bash 所替换 (整合C shell,提供更多的功能)
1)为什么我们的系统上合法的shell要写入/etc/shells这个文件?
这是因为系统某些服务在运行过程中,会去检查用户能够使用的shells,而这些shell的查询就是借由/etc/shells这个文件。
2)用户什么时候可以取得shell来工作?还有我这个默认会取得哪一个shell?
当我登录的时候,系统就会给我shell让我来工作,而这个登录取得的shell就记录在/etc/passwd这个文件内。
不同的shell具备不同的功能,shell还决定了Linux中默认的shell是/bin/bash,流行的shell有ash、bash、ksh、csh、zsh等,不同的shell都有自己的特点以及用途
目前大多数linux系统默认使用的是bash shell,默认登陆shell是/bin/bash,可以查看/etc/passwd文件里注明
这个shell是针对用户而言的,可以查看/etc/passwd里面的最后的字段使用的是哪个shell,如果想要修改可以用chmod -s或者chsh -s来重新指定
3)shell脚本能干什么
自动化完成软件的安装部署,如安装部署LAMP架构服务
自动化完成系统的管理,如批量添加用户
自动化完成备份,如数据库定时备份
自动化的分析处理,如网站访问量
4)shell脚本使用场景
在需要完成大量复杂、重复性的工作时,不需要在命令行重复执行命令,直接运行shell脚本即可,大大的节省了时间提高了效率
5)如何学习shell脚本
熟悉掌握各种linux命令
掌握脚本的标准格式
掌握脚本的基本语法
2.2 执行 Shell 脚本
使用vi编辑器,创建shell程序文件。通常使用.sh作为shell程序后缀名。 shell程序的基本格式:
1、指定解释器信息。 默认: /bin/bash
2、书写shell程序代码
3、保存shell程序代码
4、执行shell程序 提前:给shell程序授予可执行权限
第一种: ./xxx.sh 在当前目录中执行shell程序
第二种: /xx/xxx.sh 书写全路径的shell程序
第三种: sh /xx/xxx.sh 把shell程序作用/bin/sh解释器的参数,通过运 行解释器来执行shell
程序的基本组成
1. 变量
2. 数据类型
3. 运算符号
4. 流程控制语句(默认:程序是按照从上向下依次执行)
5. 数组
6. 函数(另一个名字:方法)
3. Shell 程序:变量
3.1 语法格式
变量的语法: 变量名=值
注意: 等号两边不能有空格 ,同时变量名的命名须遵循如下规则:
①首个字符必须为字母( a-z, A-Z)
②中间不能有空格,可以使用下划线( _)
③不能使用标点符
④不能使用 bash 里的关键字(可用 help 命令查看保留关键字)
3.2 变量使用
使用一个定义过的变量,只要在变量名前面加 $ 即可
变量的定义: 变量名=初始值 等号两边不能有空格
变量的使用: $变量名 或 ${变量名}
修改变量中的值: 变量名=新的值 针对普通变量
只读变量: readonly 变量名=初始值 只读变量在初始化后不能修改初始值,只读变量不能被删除
删除变量(只能删除普通变量): unset 变量
4.字符串
字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。
4.1单引号
单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;
单引号字串中不能出现单独一个的单引号(对单引号使用转义符后也不行),但可成对出现,作为字符串拼接使用。
4.2 双引号
双引号里可以有变量;
双引号里可以出现转义字。
4.3 获取字符串长度
4.4 提取子字符串
注意:当字符串中有空格时,空格也算一个字符存在(字符串是从0开始计算)
4.5 查找子字符串
格式 : `expr index 字符串 子字符串`
注意: 以上脚本中 ` 是反引号(Esc下面的),而不是单引号 '
5. Shell 程序:参数传递
5.1 参数传递方式 传递参数的方式
传递参数的方式 ./shell程序 [空格] 参数1 [空格] 参数2
hell程序脚本内获取参数的格式为:
$n n 代表一个数字, 1 为执行脚本的第一个参数, 2 为执行脚本的第二个参 数,以此类推……
$0 表示当前脚本名称
5.2 特殊字符 shell程序中的特殊字符
6. Shell 程序:运算符
6.1 运算符的基本使用
Shell和其他编程语言一样,支持包括:算术、关系、逻辑、字符串等运算符
原生 /bin/bash 不支持简单的数学运算,但是可以通过其他命令来实现, 例如:expr 。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。\代表转义字符
注意:①运算数和运算符之间要有空格。
例如: 2+2 是不能运算的,必须写成 2 + 2
②完整的表达式要被`符号包含,注意不是单引号,在 Esc 键下边
此外,还可以通过(()) 、 $[] 进行算术运算
当仅只是进行+1运算时,可以直接使用:((…++))
拓展:read的简单使用
6.2 关系运算符
注意:关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
6.3 逻辑运算符
-a 代表与,符号为 &&;-o代表或,符号为 ||
总结
shell是Linux系统中的命令解释器,可以帮助处理批量重复工作,大幅提升工作效率,替企业节省成本。其能完成的任务主要包括以下几个方面:
①自动化安装部署,如搭建论坛
②批量添加用户
③数据库备份
④网络负载
⑤访问网站