shell是什么
介于人和计算机内核之间
人类有人类语言
计算机语言
输入ls 翻译为01 传递给内核
shell的类型
cat /etc/shells
[root@test ~]# cat /etc/shells
/bin/sh 现在已淘汰
/bin/bash 现在常用的也是linux默认的shell管理
/usr/bin/sh
/usr/bin/bash 现在常用的也是linux默认的shell 普通用户
/bin/tcsh 基于tsch,提供更多的扩展功能
/bin/csh 类C语言shell
/bin/bash
我们默认使用的shell就是bash
如何查看用户使用的shell
[root@localhost ~]# cat /etc/passwd 查看用户信息
root:x:0:0:root:/root:/bin/bash
czy:x:1000:1000:CZY:/home/czy:/bin/bash
dhcpd:x:177:177:DHCP server:/:/sbin/nologin (nologin意思是禁止登录)dhcpd是程序用户,一般程序用户都是禁止登录的
shell脚本
脚本语言:扩建语言,动态语言,也是编程语言的一种,主要用来控制软件应用程序
都是以文本形式保存,还是那句话,Linux一切皆文件
只有在被调用的时候,文本代码才会被解释或者编译,执行。 所以叫做脚本
- 创建脚本的规范格式
后缀.sh (.txt也可以,但一般不这么写,行内约定成俗的习惯)
shell脚本的作用
1.自动化运维(配合定时任务执行)
2.批量化重复操作可以通过脚本执行,减少人工的重复输入。
3.减轻了管理员的工作量
4.提高处理文件的速度
5.避免手打配置出错(当然了,在你写脚本的时候要先测试一遍,确定可行无出错再运用到生产环境中)
++此外命令一定要多敲++
shell脚本的构成
1、声明解释器
2、#表示注释,注释掉的代码不会被执行,而且是按行进行注释
3、脚本当中的语句,linux的可执行命令都可以做为shell脚本的语句
4、脚本当中的语句按照从上到下依次按行执行
shell的执行方式
1、赋权执行 执行权限
2、不赋权执行(脚本调试)
不赋权执行
- sh 脚本名
- source 脚本名
对于刚刚修该的文件进行初始化操作(文件的内容都是shell语句,都是可执行的命令)执行source之后可以不需要重启,使更改的内容直接生效
sh:只在当前环境运行,并不涉及子shell环境的切换
source:新建一个shell之后继续执行,环境切换,并且所有的执行结果都会保存在这个shell里面
赋权执行:
chmod 777
./123.sh 在当前目录中执行
. /opt/123.sh 绝对路径,任何目录下都可执行
执行脚本不能放在家目录 最好是在opt目录下
结合定时任务执行,必须要绝对路径
标准输入:键盘 文件编号是0 我们执行的命令结果是。 ls cd/opt
标准输出:显示器,显示输出的结果
标准错误输出:显示器,显示错误的输入信息
重定向:
echo 123 > 123
重定向输出:将标准输出的内容保存到指定的文件 ,覆盖文件当中的原有内容
>> 也是重定向输出,在文件内容的尾部追加,不会覆盖文件的原有内容
重定向错误输出:2> 2>>
命令错了他才会记,你要是对了它反而不记入了
混合输出:&> 会覆盖原有内容
重定向输入:<
<> >>&>
怎么在shell脚本中定义变量,以及shell脚本的变量类型shell的运算符
变量:面向对象,对象的名称 对象的属性
abc=123
变量属性:值的类型
int:整数类型
string:字符串类型
布尔:ture false
浮点:1.2 3.4 5.6
int abc=1
string abc =abc
变量名=属性值
打印变量值 echo $
[root@localhost opt]# echo $a
10
变量的命令规范(自定义变量):
1、不要使用linux的系统命令作为变量名
==2、不要用中文定义 ==
3、不要使用特殊符号作为变量名称的开头 (_下划线可以使用)
==4、默认规则:中文 翻译为英文 示例学生-student ==
5、默认加上注释的,变量名的引用保持前后一致
自定义变量:
在自定义变量当中
: “” ``
整数类型可以不加引导,赋值为字符串类型,最好加上引导,以避免歧义
在给变量赋值时,单引号和双引号一样,不影响变量的值
`命令替换,先执行反撇号当中的命令,然后再把命令执行的结果赋值给变量。
打印变量是,引号的作用 这里不涉及反撇号
打印变量双引号和单引号机制不同
echo"$a"弱引用,原变量的值不变
echo’$a 强引用,变量值将不再打印,就是这个字符串
[root@localhost opt]# echo "$a"
10 弱引用,原变量的值不变
----------------------------
[root@localhost opt]# echo '$a'
$a 强引用,变量值将不再打印,就是$a这个字符串
“${a}” 保证一定能够正确的识别变量值
[root@localhost opt]# echo "${a}"
10
read命令的方式获取变量
read -p "提示信息"变量名
read -p "输入一个数:" a
read -p "输入另一个数字" b
c=$(($a+$b))
echo $c
~
[root@localhost opt]# source jisuanqi.sh
输入一个数:78797987
输入另一个数字13131231231
13210029218
变量的作用范围:
默认情况,新定义的变量只能在当前的shell环境中生效
全局变量:
exprot 变量名=变量值
需要再一整套环境当中引用唯一且不需要变化的变量时,才会声明全局变量。
环境变量:
系统提前创建,用户也可以添加,设置用户的工作环境 ,配置系统行为,控制程序执行
特殊的全局变量:
用户级环境变量:只对当前用户可加
预定义环境变量:系统预设,所有人都可见,相当于全局变量
自定义的环境变量:特殊的全局变量,只对设置用户有效
$USER 显示用户的名称
$HOME 用户的家目录
$PWD:表示当前所在的工作目录
$PATH:可执行用户程序的默认路径
位置变量:
命令行参数
在脚本或者程序运行时,传递给他们的值,而且位置变量在脚本外部传递变量值
$n 1-9
预定义变量:
编程语言或者脚本解释器提供的,不能修改的。只能根据需要自动设置和更新
$*
$@
表示命令或者脚本需要处理的参数
不加引号的表现一致,都会把参数分行处理
加上引号,会把参数当成一行来处理
$#:显示需要处理的参数个数
$?:表示前一条命令或者脚本执行之后的返回状态,只有返回0,表示执行成功,所有非0全部表示执行失败
也可以用在函数中,做为retur的参数