简单介绍shell
shell是一种C语言编写的程序,是用户操作Linux的桥梁.
shell脚本需要一个文本编译器和一个文本解释器.
一般shell脚本中的第一行是:
#!/bin/bash
这一行的作用是告诉你的系统这个脚本需要使用什么解释器执行
执行shell的方式
A:一般创建的脚本文件是没有赋予执行权限的(也就是没有x权限),可以使用:
chmod a+x 脚本名
来为文件赋予权限,a(all)也就是所有用户
B:或者将存放脚本文件的路径配置到环境变量中,但也要注意文件的权限
你可以直接使用bash或sh叫上文件名来执行,注意是要在该脚本目录中,其他目录下需要使用文件的绝对路径
C:,且也需要在文件同一目录下才能执行直接输入文件名执行
当然,为了方便,可以配置了环境变量,然后使用sh 叫加文件名,这样无论在哪个目录都可以执行
echo
echo是shell的内建命令,用来输出.
echo命令\转义符,可以将特殊字符转变为普通字符,也可以将普通字符转变为特殊字符""\
如果相见需要将普通字符转为特殊字符,需要
echo -e "\n"
\n换行符
\tab制表符
\c不换行
$ 表示引用变量
``反引号,反引号里面的命令会优先执行,将执行结果返回到命令所在的位置,作用等同于( )
shell变量
注意:赋值等号两边不能有空格!
可以使用字母,下划线开头,不建议使用下划线开头
后面由字母,数字,下划线的任意组合构成
不能以数字开头
不能使用标点符号
不能使用bash的关键字
unset name # 删除变量name
默认情况下所有的环境变量都是大写!
查看系统的环境变量
env
set
包含环境变量,自定义变量
export
可以用来显示环境变量,也可以用来设置环境变量
单引号中的所有字符都会原样输出,单引号中的变量是无法引用的.
脚本传参
在执行shell脚本时,可以进行传参
在脚本内获取参数使用: $n
$0# 当前执行的shell脚本的文件名
$1# 第一个参数
$2# 第二个参数
$n# 第n个参数
特殊字符:
$## 传给脚本的参数总和,一共有几个参数
$*# 将所有的参数组合成一个字符串输出
$@# 输出所有的参数,是多个字符串
每一个命令执行成功与否,可以使用$?来查看
如果前一个命令执行成功,$?返回0
如果前一个命令执行失败,$?返回非0的值
exit可以让程序中断,并回传一个状态码给系统.
在考虑命令相关性的情况下:
命令1 && 命令2
1.如果命令1执行成功,则执行命令2
2.如果命令1执行失败,则不执行命令2
命令1 || 命令2
1.如果命令1执行成功,则不执行命令2
2.如果命令1执行失败,则执行命令2
11.5 文件测试运算符
-s # 判断文件大小是否大于0
-e # 判断文件是否存在,存在返回0
# 判断文件类型
-L # 判断文件是否存在且为链接文件(编写脚本时,优先判断是否是链接文件)
-f # 判断文件是否存在且为普通文件
-d # 判断文件是否存在且为目录
# 判断文件权限
-r # 判断文件是否可读
-w # 判断文件是否可写
-x # 判断文件是否可执行
read命令
read的作用: 读取来自键盘的输入的数据.
语法:
read [选项] 变量
-p "提示信息"
-t 秒数# 指定超时时间(如果没有在指定时间内输入,则直接结束)
-s # 隐藏输入的信息
sh [选项] 脚本文件名
-n检查是否存在语法错误
-v运行脚本之前,先将脚本的内容输出到屏幕上
-x将脚本运行中使用到的代码输出到屏幕上
输出重定向
什么是输出重定向?
将原本应该输出到屏幕上的信息,输出到文件或者某些装置设备中.
输出分类:
标准输出: 命令执行成功所回传的正确信息
标准错误输出: 命令执行失败所回传的错误信息
处理标准输出与标准错误输出用到的代码与特殊字符:
标准输出:
1> , 1>> # 1可以省略: > >>
标准错误输出:
2> , 2>> # 2不能省略
> 覆盖
>> 追加
如果要将标准输出和标准错误输出都输出到同一个文件中则使用: &>
cat sh01.sh file &> stdout.log
/dev/null # 黑洞装置, 可以将不需要的信息输出到该装置中